2009-09-28 4 views
15

Я новичок в контейнерах IOC и изучаю Ninject. Я использую версию 2.0, только что загруженную из Github.Ninject 2.0 Параметр конструктора - как установить, когда присутствует конструктор по умолчанию?

Я пытаюсь установить строковый параметр в конструкторе, когда присутствует конструктор по умолчанию. Я прошел через источник Ninject, но я недостаточно знаком с шаблонами, которые используются для того, чтобы легко определить, что мне не хватает.

Вот мой тест консольного приложения:. «Hello World!».

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

код выводит на экран «Wrong сообщение :(» на консоль Если я удалю конструктор по умолчанию в TestClass я получаю Что же я здесь отсутствуют

для уточнения:. Я хочу, чтобы класс, чтобы напечатать «Hello World!» на консоль с конструктором по умолчанию настоящего времени в

ответ

8

строки не является самим-привязываемым, поэтому не учитываются как зависимость Когда будет запущен scector .ctor, он забьет значение по умолчанию .ctor и строку . Так же, поскольку зависимость не может быть решена. Вы можете исправить это, указав свою строку .ctor

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

и ваш код будет работать нормально.

+0

Большое спасибо Яну! – Stuart

+0

Я только что совершил патч ранее сегодня, который также должен был заботиться об этой проблеме без атрибута [Inject]. Параметры теперь оцениваются при оценке того, какой .ctor использовать. –