ASP.Net Coreの組み込み依存注入
.Net Core内蔵DI
ASP.NET Coreの下位設計は依存注入をサポートし、使用する.ASP.NET Coreアプリケーションは、組み込みフレームワークサービスを使用して起動クラスStartupのメソッドに注入することができ、アプリケーションサービスConfigureServicesは注入を構成することができます.
依存注入とは何ですか?
依存注入(Dependency injection,DI)は、オブジェクトとその協力者または依存項目との間のばらばらな結合を実現する技術である.
逆転思想に依存するのは何ですか。
クラスの設計で使用される松結合思想は、「高層モジュールは低層モジュールに依存すべきではなく、両者とも抽象に依存すべきである」、すなわち抽象とインタフェース向けのプログラミングを核心とする.
.Net Coreにおけるサービスの注入
ConfigureServiceメソッドにサービスを注入するには、次の手順に従います.
services.AddTransient< IEmailSender, AuthMessageSender >();
AddTransientメソッドは、特定のタイプのオブジェクトで確立された特定のサービスに特定のタイプをマッピングするために使用されます.最初の汎用タイプは、コンテナから要求されるタイプ(通常はインタフェース)を表します.2番目の汎用タイプは、コンテナによってインスタンス化され、これらの要求を完了するために使用される特定のタイプを表す.
サービスは、次のライフサイクルに設定できます。
Transientライフサイクルサービスは、要求されるたびに作成されます.このライフサイクルは、軽量レベルの無状態のサービスに適しています.
役割ドメイン役割ドメイン(Scoped)ライフサイクルサービスは、リクエストごとに作成されます.
Singletonライフサイクルサービスは、最初にリクエストされたときに作成され、後続のリクエストごとに同じインスタンスが使用されます.
なぜ、依存注入をいつ使うのか。
サービスでは、ステータスのある静的メソッド呼び出しと直接インスタンス化依存のタイプを避ける必要があります.newキーワードは「接着剤」のように、クラスとクラスを密接に依存させ、クラスが変化すると、依存するクラスも変化し、この代価は大きい.
我々のコード設計は「高凝集,低結合」の考え方を持っているが,newのような「接着剤」のような性質は我々の考え方とは正反対であるため,依存注入を用いてクラスとクラスの間をデカップリングしなければならない.クラスとクラスの間をインタフェース、すなわち逆転原則に依存させることで、コードのメンテナンスと拡張に有利である.
注入に依存することで,複数のクラスでnewによって同じクラスのオブジェクトを作成する問題を解決することができ,これによりコードがDRY(Don't Repeat Yourself)の原則に適合するようになった.
このように書くのはnewが少しも役に立たないというわけではありませんが、書くコードがソフト・ハードウェア・インタラクションであれば、ハードウェアの呼び出しは基本的に固定されているので、依存注入は必要ありません.