Я понимаю концепцию 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);
}
}
Как вы можете видеть, зависимыми являются Constructor Injected. Теперь на пару вопросов.
-
Является ли плохая практика, чтобы ваши объекты зависели от внешних классов, таких как ShipQuoter? Устранение этих зависимостей, по-видимому, приводит меня к анемическому домену, если я правильно понимаю определение.
-
Неправильно ли использовать контейнер IoC для разрешения этих зависимостей и при необходимости создавать объект? Возможно ли это сделать?
Спасибо за понимание.