Может ли NInject загружать модули / сборки по требованию?
Есть ли средства в NInject, которые позволят мне загружать сервисы из других модулей (сборок) по требованию, как это делается в Unity?
3 ответа
Я уверен, что это то, что вы ищете:
var kernel = new StandardKernel();
kernel.Load( Assembly.Load("yourpath_to_assembly.dll");
Если вы посмотрите на KernelBase с отражателем в Ninject.dll, то увидите, что этот вызов рекурсивно загрузит все модули в загруженных сборках (метод Load принимает IEnumerable).
public void Load(IEnumerable<Assembly> assemblies)
{
foreach (Assembly assembly in assemblies)
{
this.Load(assembly.GetNinjectModules());
}
}
Я не совсем понимаю, что вы подразумеваете под "Like Unity", но вы можете сделать несколько разных вещей для загрузки сборок. Сам Ninject по умолчанию будет загружать локальные сборки для расширений / плагинов. Ninject также может загружать классы NinjectModule из сборок. Если вы хотите сделать что-то более сложное, вы можете использовать проект https://github.com/ninject/Ninject.Extensions.Conventions, чтобы выполнить множество различных операций сканирования и привязки типов.
Если вы имеете в виду загрузку сборок нестатически из коробки, то нет.
Есть много других вопросов по этому поводу, например, Использование Ninject в плагине, подобном архитектуре.