2014-10-01 2 views
0

В моем решении, у меня есть главный проект, WebUI проект а, а также некоторые поддержки суб проекта, например домена для доступа к базе данных, кварцевая проекта для выполнения запланированных заданий по Кварцевый т.д.Использование инъекции совместно зависимость в целом решения

до недавнего времени я использовал Ninject успешно в главном проекте, но теперь мне нужно использовать Ninject в других проектах также. Могу ли я делиться зависимостями внутри всего решения, что означает доступ ко всем компонентам извне, или я могу получить доступ к ним только в одном проекте?

Я попытался придать им новые проекты, но привязка не найден:

No matching bindings are available, and the type is not self-bindable. 

Это нормально, чтобы иметь более одного Ninject ядра внутри раствора при условии, что каждый из них будет использоваться только внутри одного проекта ? Или есть лучший способ?

ответ

3

Я считаю, что Kernel должен быть индивидуально с точкой входа приложений. Это корневой состав и является местом для определения вашего ядра Ninject, чтобы он мог разрешать типы для всех графов объектов, которые будут созданы для приложения. Ядро может быть создано из коллекции экземпляров NinjectModule. Модули - это то, где вы определяете свои привязки. Если у вас есть несколько приложений, которые будут использовать иерархию типов, которые вы определили, я бы создал привязки в пользовательских NinjectModules, которые живут внутри ваших сборок. Затем в зависимости от вашего приложения вы можете смешивать и сопоставлять модули при создании ядра. Это должно помочь в уменьшении дублирования привязок в каждом приложении, и они будут находиться в многоразовом месте.

Конкретно в вашем случае я бы:

  • Создать DomainModule и указать все привязки, специфичные для вашего домена.
  • Создайте QuartzModule и укажите все привязки, специфичные для планирования заданий.
  • Вы также можете создать модуль WebUI, но это будет специфично только для вашего проекта WebUI, который также является вашим корнем состава. В результате он не будет повторно использоваться в будущих приложениях. Вы можете добавить свои привязки непосредственно к ядру для этого проекта, если хотите. Если у вас есть конкретный проект WEB, скажем, с вашими контроллерами и т. Д., Вы можете создать модуль для справки.
  • Составьте ядро ​​в проекте WebUI, указав модули в других приложениях: kernel.Load (new [] {DomainProject.DomainModule, SchedulingProject.JobModule});

Modules and the Kernel Documentation

1

Вы можете, но для его работы вам необходимо создать ядро ​​и привязки в каждом проекте, который может выполняться. поэтому для ex, если у вас есть web prj логика домена prj консольное приложение, вам нужно создать ядро ​​внутри Интернета и консоли. Эти 2 prj будут ссылаться на вход в домене prj, а затем он будет использоваться совместно.

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