我有一个Visual Studio解决方案,其中包含以下内容:
对于我的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项目不应该知道&#34;关于ORM,对吧?为什么这不被认为是糟糕的设计?管理这种依赖的正确方法是什么?
答案 0 :(得分:1)
如果在MVC project
中配置所有依赖项,则需要引用包含实现的项目。
我对这个解决方案没问题,如果真的需要避免这种参考,你可以尝试以下方法。
我不熟悉Ninject,但是CastleWindsor中的可以在任何地方(在任何程序集中)编写installers ,然后在您的类型注册过程中调用它们MVC project
。有一个可能对您有帮助的问题: Convert this Castle Windsor Installer to Ninject to register all repositories 。
如果您添加一个知道ORM project
及其干扰的“安装程序”的项目,则MVC project
不会直接引用ORM project
。在这种情况下,您的MVC project
应该只了解DataAccess图层界面和project with installers
。