以下のシナリオを考えます。具体的なタイプのジェネリックインターフェイスを注入すると、依存関係注入の目的が無効になりますか?
public interface IRestaurant<IDinner, IDesert> { }
public class Pasta : IDinner {}
public class Cake : IDesert {}
public class Chef
{
// resolving a mix of interfaces and concrete classes
public Chef(IRestaurant<Pasta, Cake>) { }
}
2つのコンクリートクラスの注入は、依存性注入の目的を無効にしますか?依存関係の注入がその結合を破るためにあるのに対し、私たちは現在Pasta
とCake
のクラスに強く結合しているので、私の感覚はそうです。
次はもっと意味がありますか?
public class Chef<IDinner, IDesert>
{
public Chef(IRestaurant<IDinner, IDesert>) { }
}
シェフがパスタやケーキ以外の夕食や砂糖を食べることはできますか? –
最初の例では、いいえ、2番目の例ではyesです。 –
シェフがそのコンビネーションだけを扱うことができるのであれば、具体的なタイプを使ってもうまくいくように思えます。彼らがそれよりも多くの組み合わせを扱うことができるなら、ジェネリックがより適切かもしれません。もしあなたが 'public class PastaAndCakeChef'と書いたのであれば、その意図はもっと明白でしょうか? –