2010-02-23 5 views
5

Я использую .Net 3.5 и консольное приложение, которое в конечном итоге станет сервисом Windows.Какая DLL является привязкой (Of T) от Ninject, расположенной в

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

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

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

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

ответ

7

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

Спасибо. Я могу только поднять вас один раз и выбрать это как правильный ответ, я бы хотел сделать больше. Я боролся весь день. Есть документация о том, как все висит вместе, но я изо всех сил пытался найти что-то для своего сценария. Другие учебные пособия по запуску все, казалось, отсутствовали, когда я пошел к результату поиска. – uriDium

+0

Эй, нет проблем! Я случайно использовал Ninject и долго боролся, когда сравнивал все контейнеры IoC. Рад, что смог помочь. –

0

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

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

+0

Hi. Я быстро посмотрел, но это было не так. Спасибо, в любом случае. – uriDium

 Смежные вопросы

  • Нет связанных вопросов^_^