我了解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容器解析这些依赖关系并在需要时构造实体是一种不好的做法吗?是否有可能做到这一点?
感谢您的任何见解。