.netコアを使用すると、「サービス」を登録できます。これは、わかっているように、具体的なクラスにタイプを登録できるということを意味しています。依存性注入容器のポイントは何ですか?
このように、私はDIを学び、それを実践する時期だと決めました。私はそのコンセプトを理解しており、テストでは大いに有益です。しかし、私を混乱させるのは、サービスを登録し、実際に必要かどうかという考え方です。例えば
、私が持っている場合:
public class MyClass
{
public MyClass(IDataContext)
{
... store it
}
}
そしてこれは私がテストで偽物とmoqsを可能にする、IDataContextを実装するクラスを注入することを意味します。しかし、なぜ私はサービスを登録し、スタートアップの具体的なクラスにIDataContextをマップするのですか?ただ、他の方法では、以下のものを使用してと間違って何かがある:
DataContext dc = new DataContext(); // concrete
var c = new MyClass(dc);
編集
この質問はむしろ、コンストラクタでインタフェースを使用する理由よりも、コンテナ(サービス)を使用してのポイントを中心にしました。
あなたは場所のint DIコンテナを持つことの目的を破っているので。 – Nkosi
例えば、あなたは特定のDBMSに束縛されていませんか?例えば。たぶんあなたはマルチテナントアプリケーションを構築しており、1人のテナントは何らかの理由で別のDBMSを使用する必要があります。 –
サービスとその依存関係を登録して、DIコンテナがオブジェクトグラフを水和する方法を知っているようにします。 – Nkosi