Внедрение зависимостей в нескольких приложениях - PullRequest
1 голос
/ 25 февраля 2011

У меня есть сеть, которая ссылается на слой данных и сущностей.Теперь я хочу расширить свое решение с помощью консольного приложения, которое будет выполнять некоторые вещи, связанные с базой данных, и, следовательно, также иметь ссылку как на уровень данных, так и на слой сущностей.В своем слое Data and Entity я использую Dependency Injection повсеместно и думал, нужно ли мне снова объявлять все привязки для этих инъекций (как в моем веб-приложении) - или я могу как-то поделиться ими, чтобымое веб-приложение и консоль используют одинаковые привязки?

Моей первой мыслью было создать общую библиотеку со ВСЕМИ моими привязками, а затем вызывать только те, которые мне нужны ... но это привело к ненужным ссылкам на дерьмовую загрузку сборок.

Вкратце: Как я могу объявить свои привязки внедрения зависимостей один раз и использовать их как в своем веб-приложении, так и в моем консольном приложении?

Есть предложения?

Ответы [ 2 ]

5 голосов
/ 03 марта 2011

Если вы хотите, чтобы в сборках бизнес-логики не было модулей Ninject, вы можете добавить их в свои сборки, например EntityBindingModule.dll и скажите ядру загрузить их все в ваш загрузчик: kernel.Load("*BindingModule.dll")

Таким образом, это просто вопрос развертывания, какие привязки добавляются.

ПРИМЕЧАНИЕ. Для этого требуется некое соглашение между сборками, загружаемыми загрузчиком, и фактическим именем сборок. В приведенном выше примере это то, что эти сборки заканчиваются BindingModule.dll.

1 голос
/ 26 февраля 2011

Я думаю, что макет, подобный этому, может работать:

Console (Just Data)  
|  
|--> Ref: Data  
|--> Ninject: Load DataModule  

Web (Both Data and Entity)  
|  
|--> Ref: Data  
|--> Ref: Entity  
|--> Ninject: Load DataModule, EntityModule (should wire up the bindings)  


Data  
|  
|--> Ref: Common  
|--> Data.cs  
|--> DataModule.cs -> Bind<IData>().To<Data>()  

Entity  
|  
|--> Ref: Common  
|--> Entity.cs  
|--> EntityModule.cs -> Bind<IEntity>().To<Entity>()  

Common  
|  
|--> IData.cs  
|--> IEntity.cs 

Документация Ninject подробно описывает, как вы будете использовать модуль в коде.

...