私たちのチームは最近、.NET CoreクラスライブラリがAddMyServices()のようなIServiceCollection拡張メソッドを提供するという事実によって、独自の実装を登録することが良い方法であるかどうかを決定するのに大きな苦労をしました。
私のポイントは、次の理由でこれを行うのが良いことでした。
反論は次のとおりでした:
もっと経験豊富な.NET Core開発者に、すべてのプロとのアプローチについて尋ねたかったのですが、おそらく私はそれが欠けています。ここに記載しなかった2番目のアプローチを使用することについて強力な議論がある場合、私はそれについてよく知りたいと思います。
PS。この質問は、より意見に基づくものとしてマークされたため、StackOverflowから移動されました。私の意見では、それはオブジェクト指向プログラミングのコア原則に触れており、問題は、大多数の開発者が選択しているものを見つけることではなく、なぜ誰かが一方に対して他方を好むかについてです。
ありがとう、Radek
ASP.Netコアドキュメントで推奨
各services.Add {SERVICE_NAME}拡張メソッドは、サービスを追加(場合によっては構成)します。たとえば、services.AddMvc()は、RazorページとMVCが必要とするサービスを追加します。 アプリはこの規則に従うことをお勧めします。 Microsoft.Extensions.DependencyInjection名前空間に拡張メソッドを配置して、サービス登録のグループをカプセル化します。
しかし、私はしません。
プラグインの設定に関して最も厄介なことの1つは、プラグインの設定に使用する拡張メソッドを推測しようとすることです。あるいは、名前とバージョンとフレームワークの間で変更されているように見えるので、それらのバージョンは
第二に、多くの場合、これらのロールアップされた登録メソッドは、基盤となるサービスでオーバーライドまたは構成する必要のあるすべてのものを公開しません。サービスマネージャーの要点は、必要に応じて依存関係を置き換えることができるようにすることですが、それを行う拡張メソッドはそれを防ぐことができます。
しかし、おそらく最も重要なこととして、この条約がまだ成立していないと思います。 startup.csとprogram.csに関しては、いくつかの競合する哲学があるようです。 1つの方法しかサポートしていない場合、誰かの反対側にいることになります。
拡張メソッドを提供しますが、別のオプションパッケージで提供します。ユーザーが必要に応じてコンポーネントを手動で登録したり、デフォルトのセットアップで拡張メソッドを使用したりできるようにします。