我理解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容器来解析这些依赖关系并在需要时构建实体是否是不良实践?这样做是否可能?
感谢任何见解。