Первое, что вам нужно сделать, это убедиться, что вы выполняете код привязки в модуле Ninject внутри метода Load, который вы переопределяете.
Например:
public class ApplicationModule : NinjectModule {
public override void Load() {
Bind<IWeapon>().To<Sword>();
// additional bindings continue ...
}
}
Класс NinjectModule наследует классы и интерфейсы, которые определяют синтаксис плавного связывания Ninject, что делает метод Bind<T>()
доступным в области действия класса. Эти модули затем передаются ядру Ninject при создании экземпляра ядра:
var kernel = new StandardKernel(new ApplicationModule());
Затем будет вызван метод Load()
каждого модуля, переданного ядру, и будут выполнены определения привязки, содержащиеся в методах.
В приведенном выше примере в качестве базового класса указан NinjectModule; однако это относится к версии 2.0 Ninject. Если вы используете Ninject 1.x, ваш базовый класс будет StandardModule
. В любом случае, метод загрузки переопределяется, и там выдают операторы привязки (которые похожи в обеих версиях).
Чтобы ответить на ваш вопрос:
Для Ninject 1.x требуемая DLL - это ninject.core.dll, а пространство имен, в котором определен StandardModule, - Ninject.Core.
Для Ninhect 2.0 требуется DLL-файл ninject.dll, а пространство имен, в котором определен NinjectModule, - Ninject.Modules.
В обоих случаях вам может понадобиться сослаться на большее количество пространств имен в зависимости от сложности ваших операторов связывания, т. Е. Если вы используете контекстные привязки или ограничивает свои привязки и т. Д. В случае Ninject 1.x вам также может понадобиться для ссылки на Ninject.Conditions.dll для этих более сложных случаев.
Вам не нужно ссылаться на Castle.Core, если вы не используете функцию перехвата Ninject - которая является основной функцией 1.x, но является расширением в версии 2.0.
Надеюсь, это поможет.