У меня есть класс, который служит моделью данных. Я упростить это так:Смешивание инкапсуляции и зависимой инъекции
public class DataModel
{
public bool IsDataModelActive {get; internal set;}
}
Так что программисты, которые будут использовать мое DLL будет видеть только то, что им нужно, не рискуя сломать что-нибудь.
На обратной стороне я хочу использовать DI в своих классах, которые используют DataModel
. Так что я должен создать интерфейс:
public interface IDataModel
{
bool IsDataModelActive {get;}
}
И поэтому я впрыснуть это в моем классе:
public class Class1
{
IDataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = dataModel
}
}
В этом случае, это невозможно для меня, чтобы получить доступ к сеттер dataModel.IsDataModelActive.
Лучший патч я нашел, чтобы бросить после инъекции:
public class Class1
{
DataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = (DataModel)dataModel
}
}
Это помогает для модульных тестов, но это своего рода перерыв всей концепции DI. Что делать, если у меня есть другой класс, который реализует IDataModel
?
Какую стратегию вы используете или используете?
Это сделало бы чувство. Поэтому я должен выбирать между разоблачением моих сеттеров миру и не использованием DI. Это неудачно! – Mathieu
Или, может быть, это просто плохой дизайн на моей стороне? – Mathieu
Просто плохой дизайн, вероятно (без обид). Что определяет, должен ли 'IsDataModelActive' быть истинным или ложным? –