2017-03-01 2 views
0

J'ai des classes wrapper pour certaines classes tierces sans interfaces, et j'ai besoin de le référencer dans un bloc de code C# assez SOLIDE. À l'heure actuelle, j'ai une fonction statique pour convertir l'instance en une instance d'encapsuleur.Comment convertir un objet en objet wrapper dans Ninject & C#?

Exemple de code.

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; 
     } 
    } 
} 

Je veux une fonction comme

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

wrapped sera une instance de AWrapper, et il a été adopté a pour Instance

Est-ce que Ninject possède une façon de le faire? Pour demander une interface de classe wrapper, l'instance à encapsuler et récupérer la classe enveloppée?

(mes excuses, je suis sûr qu'il ya beaucoup plus clairement les moyens de demander, mais si je savais comment demander mieux, je pourrais connaître la réponse aussi bien. :))

+0

Vous n'avez pas besoin de Ninject pour cela. Vous pouvez simplement appeler 'new AWrapper (new A {Name =" bob "})'. – Steven

Répondre

1

En supposant que la le noyau était déjà lié, vous pouvez utiliser ConstructorArgument pour spécifier les arguments du constructeur. Le nom du paramètre constructeur est le premier argument de la classe.

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

wrapped sera une instance de AWrapper, et il a été passé a pour le paramètre instance dans le constructeur.