現在、依存性注入コンテナーを少し試しています。今回は 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 が必要になるたびに、それが既に指定されていることを確認する必要があります。
更新: これが悪い設計であると私が読んだ一例は、これです:
ただし、解決操作のためにカスタム コンストラクター パラメーターを渡す場合があります。これは悪いアーキテクチャだと主張する人もいるかもしれませんが、DI コンテナをレガシー システムに持ち込むような状況では、この種のアクションが必要になる場合があります。
ソース: http://mikaelkoskinen.net/unity-passing-constructor-parameters-to-resolve/