Dependency injection 将依赖注入组件保留在主代码库之外

Dependency injection 将依赖注入组件保留在主代码库之外,dependency-injection,inversion-of-control,ninject,Dependency Injection,Inversion Of Control,Ninject,我有一个MVC应用程序,它使用ninject将服务依赖项注入控制器,并且运行良好。但是,我也有一些域对象在其构造函数中需要这些服务,我想使用ninject解决这些依赖关系,但不想在我的域对象程序集中直接引用ninject。我在这里读了很多问题和答案,但我仍然不清楚最好的方法是什么。例如,我有一个ShoppingCart域对象,它需要一个IPProductCatalogService的实例传递给它的构造函数。创建购物车实例的最佳模式是什么?我可以有一个对根内核的引用并调用它,但这意味着在整个域程序

我有一个MVC应用程序,它使用ninject将服务依赖项注入控制器,并且运行良好。但是,我也有一些域对象在其构造函数中需要这些服务,我想使用ninject解决这些依赖关系,但不想在我的域对象程序集中直接引用ninject。我在这里读了很多问题和答案,但我仍然不清楚最好的方法是什么。例如,我有一个ShoppingCart域对象,它需要一个IPProductCatalogService的实例传递给它的构造函数。创建购物车实例的最佳模式是什么?我可以有一个对根内核的引用并调用它,但这意味着在整个域程序集中都有对ninject的引用。我应该在工厂类中包装对内核的访问吗


欢迎有任何想法或建议

在域对象中提供服务通常被认为是不好的做法。我认为你需要重新思考你到底想要实现什么。为什么ShoppingCart需要使用产品目录服务

从域的角度来看,我假设ShoppingCart将由许多“项目”组成,具有total等属性,并且可能会传递给订购服务。您的控制器操作将通过添加项目、删除项目等更新购物车域


如果你真的需要考虑这个选项,那就是使用普通Service。这将分离出您对ninject的(直接)依赖。

好的…谢谢。。我会看看CommonServiceLocator。在这种情况下,ShoppingCart需要ProductCatalogService的实例来检查添加产品的价格(该产品没有价格属性,因为价格是动态的)。这只是一个例子。它可能是需要注入的其他东西,例如ICCustomer,但听起来我需要更好地理解体系结构。我不太确定是否永远不会将服务放入域对象中……在我看来,域对象应该能够对其数据执行操作(我有移动数据的dto)。查看尊敬的Martin Fowler的这篇文章-这可能会变得复杂…)链接。同意!听起来像是另一个问题。无论如何,谢谢你回答我最初的问题…CommonServiceLocator看起来像我需要的。相关:相关: