2009-09-28 7 views
15

Ich bin neu in IOC Container und lernen Ninject. Ich benutze Version 2.0, frisch von Github heruntergeladen.Ninject 2.0 Constructor-Parameter - Wie wird festgelegt, wenn der Standardkonstruktor ebenfalls vorhanden ist?

Ich versuche, einen Zeichenfolgenparameter für einen Konstruktor festzulegen, wenn ein Standardkonstruktor ebenfalls vorhanden ist. Ich bin durch die Ninject-Quelle gegangen, aber ich kenne mich mit den Mustern nicht aus, mit denen ich leicht herausfinden kann, was ich vermisse.

Hier ist meine Testkonsolenanwendung. „Hallo Welt!“.

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

Die Code druckt „Falsche Meldung :(“ auf der Konsole Wenn ich den Standard-Konstruktor in Testclass entferne ich bekommen Was bin ich fehlt hier

um zu klären:. ich die Klasse will „Hallo Welt!“ zu drucken, um die Konsole mit dem Standardkonstruktor vorhanden

Antwort

8

String ist nicht selbst bindable, es ist so als eine Abhängigkeit nicht gezählt Wenn der .ctor-Scorer ausgeführt wird, erhält er den Standardwert .ctor und die Zeichenfolge .ctor das gleiche, da die Abhängigkeit nicht aufgelöst werden kann. Sie können dies beheben, indem Sie Ihre Zeichenfolge .ctor

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

zuzurechnen und Ihr Code wird gut funktionieren.

+0

Vielen Dank Ian! – Stuart

+0

Ich habe gerade heute einen Patch früher gemacht, der dieses Problem auch ohne das [Inject] -Attribut hätte beheben sollen. Parameter werden jetzt bewertet, wenn ausgewertet wird, welche .ctor-Datei verwendet wird. –

Verwandte Themen