2009-09-28 8 views
15

Je suis nouveau à conteneurs du CIO et de l'apprentissage Ninject. J'ai utilisé la version 2.0, fraîchement téléchargée de Github.Ninject 2.0 paramètre Constructor - comment définir quand constructeur par défaut est également présent?

Je suis en train de définir un paramètre de chaîne sur un constructeur lorsqu'un constructeur par défaut est également présent. J'ai traversé la source de Ninject mais je ne suis pas suffisamment familier avec les modèles utilisés pour identifier facilement ce qui me manque.

Voici mon application console de test:. « Bonjour tout le monde ».

 static void Main(string[] args) 
     { 
     IKernel kernel = new StandardKernel(); 
     kernel.Bind<ITestClass>().To<TestClass>() 
      .WithConstructorArgument("message", "Hello World!"); 

     var testClass = kernel.Get<ITestClass>(); 

     // Does not work either: 
     //var testClass = kernel.Get<ITestClass>(new ConstructorArgument("message", "Hello World!")); 

     testClass.DisplayMessage(); 
     Console.ReadLine(); 
     } 
    } 

public interface ITestClass 
    { 
    void DisplayMessage(); 
    } 

public class TestClass : ITestClass 
    { 
    public TestClass() 
     { 
     this.message = "Wrong message :("; 
     } 

    private string message; 
    public TestClass(string message) 
     { 
     this.message = message; 
     } 

    public void DisplayMessage() 
     { 
     Console.WriteLine(this.message); 
     } 

Les impressions de code « message incorrect :(» à la console Si je supprime le constructeur par défaut dans TestClass je reçois Que suis-je manque ici

pour clarifier:. Je veux la classe d'imprimer « Bonjour tout le monde » à la console avec le présent constructeur par défaut

Répondre

8
chaîne

est pas auto-bindable, donc il ne compte pas comme une dépendance Lorsque le marqueur .ctor s'exécute, il va marquer le .ctor par défaut et la chaîne .ctor la même chose puisque la dépendance ne peut pas être résolue. Vous pouvez résoudre ce problème en attribuant votre chaîne .ctor

[Inject] 
public TestClass(string message){...} 

et votre code fonctionnera correctement.

+0

Merci beaucoup Ian! – Stuart

+0

Je viens de commettre un patch plus tôt aujourd'hui qui aurait également pris en charge de cette question sans l'attribut [Injecter]. Les paramètres sont maintenant notés lors de l'évaluation du .ctor à utiliser. –