Как установить свойство или переменную в конструкторе с помощью Ninject (веб-приложение MVC3)?

#c# #asp.net-mvc #ninject

#c# #asp.net-mvc #ninject

Вопрос:

У меня есть интерфейс ITest и класс Test, который реализует ITest:

 public Test : ITest{...}
  

У меня есть такой класс:

 public class MyClass
{
 ITest test;
 public MyClass(){...}
}
  

Есть ли какой-либо способ установить новый пример Test() в тестовой переменной с помощью Ninjection? Я хочу избавиться от этого кода в конструкторе:

 public MyClass()
{
 test = new Test();
}
  

Спасибо!

Ответ №1:

Я бы рекомендовал вам использовать внедрение конструктора, например:

 public class MyClass {
    private readonly ITest _test;

    [Inject]
    public MyClass(ITest test) {
        _test = test;
    }
}
  

Это обеспечивает видимость зависимости класса, т.е. MyClass зависит от экземпляра ITest . Ninject автоматически обработает это внедрение зависимости за вас, если вы зарегистрировали экземпляр ITest в контейнере.

В качестве альтернативы вы могли бы использовать внедрение свойств / полей:

 public class MyClass {
    public MyClass() { }

    [Inject]
    public ITest Test { get; set; }
}

public class MyClass {
    [Inject] private ITest _test;

    public MyClass() { }
}
  

Комментарии:

1. Можете ли вы объяснить второй пример? Я попробовал это, но это не сработало в моем приложении.

2. Я хочу задать пример Test() в свойстве, но значение свойства всегда равно null.