2017-03-01 1 views
0

Ich habe Wrapper-Klassen für einige Klassen von Drittanbietern ohne Schnittstellen, und ich muss es in einem ziemlich SOLID-Block von C# -Code verweisen.Wie konvertiert man ein Objekt in Ninject & C# in ein Wrapper-Objekt?

Derzeit habe ich eine statische Funktion, um die Instanz in eine Wrapper-Instanz zu konvertieren.

Beispielcode.

class A 
{ 
    public string Name; 
} 

interface IAWrapper 
{ 
    string Name { get; set; } 
} 

class AWrapper : IAWrapper 
{ 
    private A Instance; 
    public AWrapper(A instance) 
    { 
     Instance = instance; 
    } 
    public string Name 
    { 
     get 
     { 
      return Instance.Name; 
     } 
     set 
     { 
      Instance.Name = value; 
     } 
    } 
} 

Ich möchte eine Funktion wie

var a = new A() {Name = "bob"}; 
var wrapped = kernel.wrap<IAWrapper>(a); 

Wo wrapped wird eine Instanz von AWrapper, und es wurde a für Instance

Does Ninject besitzen eine Möglichkeit, dies zu tun, übergeben werden? Um eine Wrapper-Klassenschnittstelle anzufordern, die zu umhüllende Instanz, und die Wrapperklasse zurückbekommen?

(meine Entschuldigung, ich bin sicher, es gibt viel mehr klare Möglichkeiten, dies zu fragen, aber wenn ich weiß, wie es zu fragen, besser, ich könnte die Antwort so gut kennen. :))

+0

Sie brauchen Ninject dafür nicht. Sie können einfach 'new AWrapper (new A {Name =" bob "})' aufrufen. – Steven

Antwort

1

Unter der Annahme, dass die Kernel wurde bereits gebunden Sie können ConstructorArgument verwenden, um Konstruktorargumente anzugeben. Der Name des Konstruktorparameters ist das erste Argument der Klasse.

var a = new A() { Name = "bob" }; 
var instance = new Ninject.Parameters.ConstructorArgument("instance", a); 
var wrapper = kernel.Get<IAWrapper>(instance); 

Wo wrapped wird eine Instanz von AWrapper, und es wurde a für instance Parameter im Konstruktor übergeben.

Verwandte Themen