最佳答案
我理解 DI 背后的概念,但我只是在学习不同的 IoC 容器可以做什么。似乎大多数人都提倡使用 IoC 容器来连接无状态服务,但是如何将它们用于实体等有状态对象呢?
不管它是对是错,我通常用行为填充我的实体,即使这种行为需要一个外部类。例如:
public class Order : IOrder
{
private string _ShipAddress;
private IShipQuoter _ShipQuoter;
public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
{
// OrderData comes from a repository and has the data needed
// to construct order
_ShipAddress = OrderData.ShipAddress; // etc.
_ShipQuoter = ShipQuoter;
}
private decimal GetShippingRate()
{
return _ShipQuoter.GetRate(this);
}
}
如您所见,依赖项是构造函数注入的。
让您的实体依赖于诸如 ShipQuoter 之类的外部类是否被认为是不好的做法?如果我正确理解了这个定义,那么消除这些依赖性似乎将我引向一个贫血领域。
使用 IoC 容器来解决这些依赖关系并在需要时构造一个实体是不是一个坏习惯?有可能做到吗?
谢谢你的建议。