Ninject модули или организация подключения зависимостей - PullRequest
3 голосов
/ 24 февраля 2010

Я начал играть с Ninject, и из скриншота говорится, что вы настроили привязку следующим образом:

class MyModule : StandardModule {

    public override void Load() {
        Bind<IInterface>().To<ConcreteType>();
        // More bindings here...
    }
}

Это все очень хорошо.

Однако предположим, что в приложении используется сотня объектов. Это будет означать, что это будет сто привязок. Это правильно?

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

Затем создайте пользовательский модуль для каждой подсистемы, который, в свою очередь, будет:

  • GUIModule
  • DatabaseModule
  • Сервисный модуль
  • ...

Для каждого модуля у вас будут правильные привязки, которые им требуются. Я на правильной странице здесь?

Наконец, будет ли эта привязка иметь место в Main или в точке входа для вашего приложения?

1 Ответ

4 голосов
/ 24 февраля 2010

Однако предположим, что у вас есть сто объекты, используемые в приложении. Тот будет означать, что это будет сто привязок. Это правильно?

Сто зарегистрированных компонентов, да, но не обязательно зарегистрированных по одному. Для Ninject существует расширение Convention, которое позволяет сканировать сборки и регистрировать типы на основе определенных правил. См. этот тест в качестве примера.

Не могли бы вы создать собственный модуль? для каждой подсистемы

Опять не обязательно. Возможно, вы просто захотите зарегистрировать все свои репозитории (просто чтобы назвать что-то) в одной регистрации конвенции.

Для каждого модуля вы должны иметь правильный привязки, которые они требовали.

Как и для любого «модуля» (будь то сборка, класс, применение), здесь также применимы понятия сцепление и сцепление . Рекомендуется поддерживать низкий уровень связи (не слишком сильно зависеть от других модулей) и высокий уровень сцепления (все компоненты внутри модуля должны служить общей цели)

Наконец-то это связывание произойдет в главном или точка входа для вашего приложение?

Да, см. этот связанный вопрос .

...