Внедрение класса в другой сборке с помощью ninject
Мой проект выполнен с использованием переносимых областей, я использую ninject для DI, я внедряю класс, который находится в другой сборке, поэтому у меня есть этот код в areaRegistraction:
DependencyResolver.Current.GetService<IModuleManager>().Add(this.module);
IKernel kernel = DependencyResolver.Current.GetService<IKernel>();
kernel.Bind<IConfigurationRepository>().To<ConfigurationRepository>();
В моем конструкторе у меня есть этот код:
public RequestController(IconfigurationRepository configurationRepository)
{
this.configurationRepository= configurationRepository;
}
Но по какой-то причине configRepository имеет значение null
Но если я поставлю:
public RequestController()
{
this.configurationRepository = ((StandardKernel)DependencyResolver.Current.GetService<IKernel>()).GetAll<IConfigurationRepository>().First();
}
Работает нормально. Чем они отличаются?
Любая подсказка будет по достоинству оценена.
1 ответ
Решение
Вторая реализация будет работать, если несколько IConfigurationRepository
зарегистрированы, но первый из них потерпит неудачу в этом случае.
Что за исключение в первом случае? Что произойдет, если вы используете Single
вместо First
во втором случае?