現時点では、私は依存性注入容器を少し実験していますが、今回は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/
あなたはどこが赤で、これが悪いデザインであるか教えていただけますか?私は実際にこのデザインがあなたが得られる最高のものだと思っているからです。 – Egi
@Egi:質問をソースで更新しました。 – Kai
[ServiceLocator](https://commonservicelocator.codeplex.com/)を使用すると、コンストラクタに注入されたプロパティをリストしなくてもDIを実行できます。 – orad