1

我有了以下的Visual Studio解決方案:使用Ninject + DbContext + Service + MVC的體系結構:如何將DbContext注入服務?

  • MyProject.Domain - 波蘇斯。
  • MyProject.Data - ORM(實體框架DbContext)。
  • MyProject.Services - DbContext周圍的包裝。包含執行業務邏輯的類。
  • MyProject.Web - 使用服務層的MVC應用程序。

對於我的MVC應用程序,我使用Ninject將服務注入到我的MVC控制器中。在我的MVC項目綁定看起來像這樣:

kernel.Bind<ISomeService>().To<SomeService>(); 

這部分工作正常。但是,我還想在我的服務中注入IDbContext,而我在網上看到的示例有點令人困惑。我在網上看到的例子看起來使上面的代碼看起來是這樣的:

kernel.Bind<ISomeService>().To<SomeService>(); 
kernel.Bind<ISomeDbContext>().To<SomeDbContext>(); 

現在,由於SomeDbContext位於MyProject.Data,這意味着我必須在我的MVC項目添加到ORM項目的引用。這有效,但這似乎打敗了IoC的目的。 MVC項目不應該「瞭解」ORM,對吧?爲什麼這不被認爲是糟糕的設計?管理這種依賴的正確方法是什麼?

+1

@Steven - 這確實是重複的。你提供的鏈接回答我的問題(特別是你的回答!)。我正在投票結束。謝謝! – anon

回答

1

如果您在MVC project中配置所有依賴關係,則需要引用可執行的項目。

我對這個解決方案好,如果真的需要避免這種參考,你可以嘗試下面的方法。

我不熟悉Ninject,但CastleWindsor就可以寫installers任何地方(任何組件內),然後在從MVC project類型註冊過程調用它們。有一個SO問題可以幫助你:Convert this Castle Windsor Installer to Ninject to register all repositories

那裏,如果你與知道ORM project及其interfeces「安裝程序」添加項目將不會從MVC project是dirrect參考ORM project。在這種情況下,您的MVC project只應瞭解DataAccess層接口和project with installers

相關問題