2009-11-07 2 views
6

Есть ли объекты в NInject, которые позволят мне загружать сервисы из других модулей (сборок) по запросу, как это делается в Unity?Может ли NInject загружать модули/сборки по требованию?

+0

Думаю, я не понимаю, что вы имеете в виду. Как вы «загружаете службы из других сборок» в Unity? – Konamiman

ответ

0

Если вы имеете в виду загрузку сборок нестатически из коробки, нет, это не так.

Есть много других вопросов по этому поводу, например, Using Ninject in a plugin like architecture

12

Я уверен, что это то, что вы ищете:

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()); 
    } 
} 
3

Я не совсем понять, что вы подразумеваете под «Like Unity», но вы можете сделать несколько разных вещей для загрузки сборок. По умолчанию сам Ninject будет загружать локальные сборки для расширений/плагинов. Ninject также может загружать классы NinjectModule из сборок. Если вы хотите сделать что-то более сложное, вы можете использовать проект Ninject.Extensions.Conventions, чтобы выполнить множество разных операций сканирования и привязки типов.

+0

Не могли бы вы предоставить более подробную информацию о том, как сделать Ninject «загружать классы NinjectModule из сборок»? Вики-страница Ninject охватывает довольно простой материал. –

+0

Итак, я получил его сейчас, я смешал версии Ninject в своем проекте. –

+0

Предоставлено ссылка на GitHub. Фактическая ссылка: https://github.com/ninject/Ninject.Extensions.Conventions. – realsonic