Ninject Binding

2

Как связать мой интерфейс с конкретным классом в другой сборке?

В моем решении есть следующие проекты:

Foo.Data
Foo.Domain

В Структурной карте Я добавляю свои два имени сборки в файл StructureMap.config, а затем используя атрибуты PluginFamily и Pluggable, сопоставьте мои интерфейсы с моим конкретным классом.

Как выполнить одно и то же с Ninject?

  • 0
    Содержат ли проекты в решении как интерфейсы, так и конкретные классы? Вы хотите связать их в потребляющем решении / проекте или в самом решении?
  • 0
    Кроме того, какую версию Ninject вы используете?
Показать ещё 1 комментарий
Теги:
ninject

1 ответ

6
Лучший ответ

Я сделаю пару предположений здесь.

  • У вас есть интерфейс IBar в вашем проекте Foo.Domain, и у вас есть конкретный класс BarClass в вашем проекте Foo.Data.
  • Фактически вы ссылаетесь на проект Foo.Domain в проекте Foo.Data, потому что BarClass реализует IBar.

Простейшей задачей Ninject является создание нового класса в Foo.Data, который происходит из Ninject StandardModule:

internal class BarModule : StandardModule {
  public override void Load() {
    Bind<IBar>()
      .To<BarClass>();
  }
}

Затем этот класс устанавливает привязку для запросов IBar к конкретному классу BarClass. Это ваш XML-эквивалент.

Следующий шаг - создать ядро ​​Ninject (иначе называемое "контейнером" ) и предоставить ему этот модуль (т.е. эту конфигурацию). Там, где вы это делаете, во многом зависит от того, какое приложение вы создаете. В общих чертах вы, как правило, настраиваете ядро ​​в точке логической точки входа или "запуска" вашего кода. Если это консольное приложение или настольное приложение Windows, это, вероятно, будет одной из первых вещей, которые выполняет функция main().

Код хотел бы:

var modules = new IModule[] {
                              new BarModule()
                            };

var kernel = new StandardKernel(modules);

В этот момент, когда вы делаете что-то вроде этого:

var barObj = kernel.Get<IBar>()

Переменная barObj ссылается на экземпляр BarClass.

Все сказанное, я вполне мог не иметь полного понимания всех нюансов вашего приложения - например, сборки загружаются динамически и т.д. Надеюсь, что это хоть какая-то помощь.

  • 0
    Немного опоздал на вечеринку, но это очень солидный ответ, спасибо, Питер.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню