#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.