За последние 9 месяцев я немного использовал Ninject. Похоже, вам нужно «загрузить» ваши модули, которые есть в вашей библиотеке, в ядро Ninject, чтобы зарегистрировать привязки.
Я не уверен, используете ли вы Ninject 1.x или бета-версию 2.0. Две версии работают по-разному, хотя концептуально они одинаковы. Я буду придерживаться версии 1.x для этого обсуждения. Другая часть информации, которую я не знаю, - это если ваша основная программа создает ядро Ninject, а ваша библиотека просто добавляет привязки к этому ядру, или если ваша библиотека сама содержит ядро и привязки. Я предполагаю, что вам нужно добавить привязки в вашей библиотеке к существующему ядру Ninject в основной сборке. Наконец, я сделаю предположение, что вы динамически загружаете эту библиотеку и она не связана статически с основной программой.
Первое, что нужно сделать, это определить модуль ninject в вашей библиотеке, в котором вы регистрируете все свои привязки - вы, возможно, уже сделали это, но стоит упомянуть. Например:
public class MyLibraryModule : StandardModule {
public override void Load() {
Bind<IMyService>()
.To<ServiceImpl>();
// ... more bindings ...
}
}
Теперь, когда ваши привязки содержатся в модуле Ninject, вы можете легко зарегистрировать их при загрузке вашей сборки. Идея состоит в том, что после загрузки сборки вы можете отсканировать ее для всех типов, полученных из StandardModule. Если у вас есть эти типы, вы можете загрузить их в ядро.
// Somewhere, you define the kernel...
var kernel = new StandardKernel();
// ... then elsewhere, load your library and load the modules in it ...
var myLib = Assembly.Load("MyLibrary");
var stdModuleTypes = myLib
.GetExportedTypes()
.Where(t => typeof(StandardModule).IsAssignableFrom(t));
foreach (Type type in stdModuleTypes) {
kernel.Load((StandardModule)Activator.CreateInstance(type));
}
Следует отметить, что приведенный выше код можно обобщить, чтобы загрузить несколько библиотек и зарегистрировать несколько типов. Кроме того, как я уже упоминал выше, в Ninject 2 встроена такая возможность - на самом деле она может сканировать каталоги, загружать сборки и регистрировать модули. Очень круто.
Если ваш сценарий немного отличается от того, что я обрисовал в общих чертах, вероятно, аналогичные принципы могут быть адаптированы.