Что такое библиотека DLL Bind (Of T) от Ninject, расположенная в - PullRequest
5 голосов
/ 23 февраля 2010

Я использую .Net 3.5 и консольное приложение, которое в конечном итоге станет службой Windows.

Большинство примеров, которые я нахожу, используют что-то вроде

Bind<IWeapon>().To<Sword>();

Я включил все библиотеки DLL в качестве ссылок в мой проект, а компилятор все еще жалуется. Любые подсказки, где я иду не так? Извините, это может быть глупым вопросом.

ОБНОВЛЕНИЕ: просто обратите внимание на множество других библиотек, которые кажутся необходимыми, но на которые нет ссылок. Есть библиотеки, такие как Castle Core. Должны ли они быть включены?

Ответы [ 2 ]

7 голосов
/ 23 февраля 2010

Первое, что вам нужно сделать, это убедиться, что вы выполняете код привязки в модуле 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.

Надеюсь, это поможет.

0 голосов
/ 23 февраля 2010

Попробуйте зайти в свойства вашего проекта (щелкнуть правой кнопкой мыши проект и щелкнуть свойства) и переназначить консольное приложение на .Net Framework 3.5, в настоящее время оно может говорить что-то вроде «.Net Framework 3.5 Client Profile». У меня была такая же проблема в прошлом, когда сборки не ссылались должным образом.

Надеюсь, что это проблема, и это помогает.

...