Я проектирую класс, который использует абстрактное свойство, чтобы предоставить точку доступа к полю. Вот отрывок из моего кода:Когда использовать DI над абстрактным наследованием?
public abstract class PageBroker : WebBroker
{
public abstract IPageProvider Provider { get; }
}
public class ArticleBroker : PageBroker
{
public override IPageProvider Provider { get; } = new ArticleProvider();
}
я понял, что я мог бы реорганизовать это использовать DI вместо этого, например, так:
public class PageBroker : WebBroker
{
public PageBroker(IPageProvider provider)
{
this.Provider = provider;
}
public IPageProvider Provider { get; private set; }
// implementation...
}
// no derived class, just new PageBroker(new ArticleProvider())
В какой ситуации (ы) будет один метод целесообразно над другим ?
Ввод конструктора должен использоваться, когда значение _required_ для свойства свойства класса. Впрыск свойств следует использовать, когда ввод значения необязателен (например, есть значение по умолчанию или свойство не требуется для конкретного использования клиента). –
@DStanley Извините, это был не мой вопрос. Я спрашивал, должен ли я сделать ** свойство «abstract», поэтому производный класс может реализовать его ** или передать его через конструктор. Это не имеет никакого отношения к инъекции сеттера. –
Ну, конструкторы не наследуются, поэтому производному классу придется «переопределить» что-то в любом случае. Поэтому я не уверен, какую разницу вы ищете (за исключением установки и инсталляции конструктора). –