は、既存のDIライブラリのメンテナの間に起こって議論があります。 AutofacのメンテナはNinjectチームがsilentをしてきたが、彼らは作成し、アダプタをサポートしますconfirmedを持っており、このような単純なインジェクターチームとして他のチーム(それは私を含んで)彼らは、アダプタをサポートしていませんhave explained。
は個人的に、私はASP.NETコア内蔵のDIライブラリがきれいDIライブラリであると思いますが、それは単純なアプリケーションに制限されています。私がhereを説明したように、SOLID原理に基づいて構築されたメンテナンス可能なアプリケーションの開発に必要な多くの機能はサポートされていません。しかし、数年前にUnity DIライブラリと同様に、このビルトインコンテナが実際に開発者に依存性注入の使用を開始させる可能性があると私は考えています。
これらの制限は、内蔵のコンテナは、特に設定して、ASP.NETシステム自体を拡張するために最適です。大規模な保守可能なアプリケーションを構築するには、別のDIライブラリを使用する必要があります。これはもちろん大丈夫です。あなたは仕事のための適切なツールを選ぶ必要があります。
残念ながら、今まで、ASP.NETチームは異なるDIライブラリを使用すると、あなたは/書き込みアダプタを使用する必要があります意味publiclyを伝えました。ほとんどのDIライブラリは組み込みコンテナによって提供されるAPIと互換性がないため、残念ながら間違ったメッセージIMOです(hereとhereについて詳しく説明しました)。 Autofacのみが合理的に同期しているように見えるため、Autofacチームがアダプタを維持する理由が説明されています。しかし、Autofacでさえ、Microsoftが定義した抽象化と互換性がないことが証明されており、抽象化にも対応できるようにするには、StructureMapと同じようにbig changesを製品に作成しなければならないことに注意してください。また、オートファックのメンテナーは全体のプロセスと一般的な抽象について約severely frustratedです。そして、私がhereを説明したように、ASP.NET提供のNinjectのアダプタ実装も壊れています。これは出る杭が打たので、アダプタを使用するASP.NETチームによる
このメッセージは、IMO大きな誤りである(DIライブラリ自体はそうではない。それはちょうど、別のDIライブラリです)。 ASP。NETチームは、アプリケーションコンポーネントとASP.NETシステム(および今後プラグインする他のすべてのサブシステム)の両方がカスタムコンテナに登録されるモデルを宣伝しています。アプリケーションの構成をASP.NETシステムの構成とは別に保つことは、はるかに合理的かつ実用的です(hereを参照)。このため
、私はむしろ役に立たない任意の容器用のアダプタの使用を見出します。 hereに示すように、自分のDIコンテナをプラグインするのは簡単ですが、ASP.NETの登録とは完全に別にしておきます。つまり、NinjectがASP.NET CoreプロジェクトでNinjectを効果的に使用できるようにする必要はありません。 Ninjectが行う必要があるのは、.NET Coreと互換性のあるバージョンを作成することだけです(製品をその新しいプラットフォームで実行する必要がある場合に備えて)。
簡単なインジェクタチーム(おそらくCastle WindsorとNinjectなど)のメンテナーがビルド、メンテナンスを選択していないものの、一言で言えばサポートが「死んでいる」とは確信していません。 ASP.NET Core用のアダプター実装をサポートしています。なぜなら、これは必要ではなく、途中であるからです。
UPDATE 2016年11月
私はexample repositoryを見てみると、特にStartup.cs of the Ninject sample projectに(それが簡単にアダプタを持っていないコンテナをプラグインできるようにすることで、マイクロソフトASP.NETコアへdiscussing some improvementsしてきました)、しかし、今までは(ファウラーが自分自身のように)彼らの "bias towards conforming containersは[彼らの]ビジョンを覆っている"ため、マイクロソフトは進歩を止めているようだ。
洞察力のあるポストをありがとう、DIコンテナに組み込まれていない大きな問題は、慣例に基づくマッピングがないことです。私は、私のスタートアッププロジェクトの下にあるすべての単一のプロジェクトを組み込み、依存関係をマップしなければなりません。私は何かが欠けていない限り、これは巨大な誤解のように思えます。 – Spets
@Spets組み込みのコンテナは、特にASP.NET自体の構成システムを意味します。これは、ASP.NETの一部を簡単に交換できることを意味し、サードパーティコンポーネントは同じ構成モデルを使用できます。組み込みコンテナはそのモデルを基に構築されているため、一部の機能が実装されていない理由が説明されています。バッチ登録は、コンテナの上に自分自身を書くことが非常に簡単であり、魅力的なDIライブラリになるためには、もっと重要な機能を最初に実装する必要があります。しかし、やはり自分のタイプを登録するためにDIシステムを乱用しないでください。 – Steven
これは意味をなさない。 – Spets