【问题标题】:Keeping dependency inject component out of main code base将依赖注入组件保持在主代码库之外
【发布时间】:2011-08-18 00:39:10
【问题描述】:

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

欢迎任何想法或建议!

【问题讨论】:

标签: dependency-injection inversion-of-control ninject


【解决方案1】:

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

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

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

【讨论】:

  • 好的...谢谢.. 我会看看 CommonServiceLocator。在这种情况下,ShoppingCart 需要一个 ProductCatalogService 实例来检查添加产品的价格(该产品没有价格属性,因为价格非常动态)。这只是一个例子..它可能需要注入其他东西,例如 ICustomer,但听起来我需要更好地了解架构。
  • 我不太确定永远不会将服务放入域对象中......在我看来,域对象应该能够对其数据执行操作(我有 dto 用于移动数据) .查看来自可敬的 Martin Fowler 的这篇文章 - martinfowler.com/bliki/AnemicDomainModel.html
  • 这可能会变得复杂...... :) 链接link
  • 同意!听起来完全是另一个问题。无论如何,感谢您回答我最初的问题....CommonServiceLocator 看起来像我需要的。
猜你喜欢
  • 2011-11-09
  • 2019-04-26
  • 2017-03-11
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2011-11-13
相关资源
最近更新 更多