В настоящий момент я немного экспериментирую с контейнерами для инъекций зависимостей, на этот раз с 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/