, в некоторых случаях я чаще всего испытываю искушение использовать «ублюдочную инъекцию». правильный «конструктор внедрения зависимостей:
public class ThingMaker {
...
public ThingMaker(IThingSource source){
_source = source;
}
Но тогда для классов, которые я собираюсь использовать как общедоступные API (классы, которые будут использовать другие команды разработчиков), я никогда не найду лучшего варианта, чем написать значение по умолчанию» bastard "конструктор с наиболее вероятной необходимой зависимостью:
public ThingMaker() : this(new DefaultThingSource()) {}
...
}
Очевидным недостатком здесь является то, что это создает статическую зависимость от DefaultThingSource; в идеале такой зависимости не должно быть, и потребитель всегда будет вводить любой IThingSource, который они хотят. Однако, это слишком сложно использовать: потребители хотят создать новый ThingMaker и приступить к работе над созданием вещей, а через несколько месяцев добавить что-нибудь еще, когда возникнет необходимость. На мой взгляд, это оставляет лишь несколько вариантов:
Мальчик, №3 кажется привлекательным. Есть другой, лучший вариант? №1 или №2 просто не стоят того.