На данный момент я немного экспериментирую с контейнерами для инъекций зависимостей, на этот раз с Unity.Зависимость впрыска и другие параметры конструктора - плохая практика?
Учитывая следующий интерфейс:
public interface IPodcastCommService
{
void Download();
void Upload();
}
и последующее выполнение:
public class PodcastService
{
private IPodcastCommService commservice;
private String url;
public PodcastService(String url, IPodcastCommService commservice)
{
this.commservice = commservice;
this.url = url;
}
}
Из конструктора, я искал решение передать параметр к нему и нашел его:
var p = container.Resolve<IPodcastCommService>(new ParameterOverride("url", myUrl));
Пока все хорошо, но в то же время я читал о том, насколько это плохо и как плохой дизайн класса есть и да, он выглядит немного уродливым. Но как я могу передать параметр классу элегантным способом?
Моя первая мысль состояла в том, чтобы сделать это как свойство, но тогда я должен проверять каждый раз, когда мне нужен Url, который он уже указан.
Update: Одним из примеров, где я читал, что это плохой дизайн, это:
Но могут быть случаи, когда вы должны пройти в пользовательских параметров конструктора для операции решимостью. Некоторые могут утверждать, что это крики плохой архитектуры, но есть ситуации, такие как приведение DI-контейнера в унаследованную систему, которая может потребовать такого рода действия.
Источник: http://mikaelkoskinen.net/unity-passing-constructor-parameters-to-resolve/
не могли бы вы сказать мне, где у вас красный, что это плохой дизайн? Потому что я на самом деле думаю, что этот дизайн лучший, который вы когда-либо получите. – Egi
@Egi: Я обновил свой вопрос с помощью источника. – Kai
Вы можете использовать [ServiceLocator] (https://commonservicelocator.codeplex.com/) для выполнения DI без указания введенных свойств в конструкторе. – orad