Как вы используете метод инъекций с Ninject?
У меня есть класс, который должен использовать IRepository для одного метода в своем классе.
В идеале я хотел бы избежать разрешения этой зависимости в конструкторе класса, и поэтому я нашел внедрение уровня метода в Ninject, и мне было интересно, как это работает?
Я понимаю, как это настроить. Что меня смущает, так это как это назвать?
Пример:
class SomeClassThatUsesRepository
{
[Inject]
public void QueryForSomeStuff(IRepository repository)
{
//do some stuff
}
}
Моя проблема в том, как мне вызвать этот метод без указания IRepository?
var someClass = Kernel.Resolve<SomeClassThatUsesRepository>();
будет работать, если я использую конструктор, но я хочу вызвать метод.
Как я могу вызвать метод, используя инъекцию метода Ninject?
2 ответа
Боюсь, что внедрение метода не работает таким образом - это всего лишь один из способов внедрения зависимостей в объект во время его построения (вы можете внедрить свои зависимости через параметры конструктора, через свойства, поля или методы). Внедрение метода полезно, если ваш класс получает свои зависимости с помощью методов установки в стиле Java, таких как
public void SetRepository(IRepository repository) { ... }
Если это отмечено [Inject]
атрибут, вам не нужно вызывать этот метод напрямую, он должен быть вызван Ninject во время инициализации для передачи IRepository
объект в ваш разрешенный объект.
Так что я верю вашему QueryForSomeStuff
метод вызывается, когда вы восстанавливаете SomeClassThatUsesRepository
,
Подтвердил, что метод внедрения не работает, как предполагалось. Получил собственный класс атрибута MVC и хотел использовать внутри него внедренный объект. Не передал его в конструктор и добавил метод
[Ninject.Inject]
public void ResolveDI(ISettingStore store)
{
ConfigHelper = store;
}
Этот метод никогда не вызывался, и ConfigHelper был нулевым при вызове атрибута OnActionExecuting.