2015-09-25 9 views
14

Ninject私はずっと久しぶりに使っていましたが、本当に好きですが、ASP.NET 5MVC 6のリリース以来、難しい選択に直面しています。ASP.NET MVC 6で引き続きNinjectをサポートしますか?

基本的に、ゲートから、Microsoftは独自の依存性注入システムを公開しました。私の知る限りでは、多くの批判がありました。しかし、私の大きな問題は他のライブラリにどのように影響するかにあります。

another question I askedother resources onlineから、冗長ライブラリMicrosoft.Framework.DependencyInjection.Ninject and Ninjectの形で与えられた「解決策」があるもののNinjectはMVC 6と箱から出して動作しないようです。これはライブラリがNuGetのリストにhttps://www.myget.org/F/aspnetmaster/のリストを追加する必要があるため、これはさらに難しいです。

私はいくつかの調査を行い、このライブラリがホストされている場所を見つけました。それはうまく見える、それは私が言うことができるから大丈夫に動作しているようだが、私を困らせるいくつかのことがあります。

  • ライブラリは本当に
  • 実際Ninject資源
  • がオンラインので

それを言及決してライブラリが曖昧なリポジトリにかなり深く埋め込まれ

  • Ninjectのクリエイター率いるされていないよう基本的に、私はこれがある種のバンド補佐官であり、Ninject(そして他のコンテナ図書館)のサポートが枯渇していることを非常に懸念しています。私が見つけていない隠された情報がありますか?

  • 答えて

    9
    • ライブラリは本当にその依存性の注入プロバイダーのサンプルを作成したライブラリ、およびそれがマイクロソフトであることを見て、these alsoを思わNinject クリエイター

    率いるされていないようremoved in beta7であった。 original questionによって参照されるDI in MVC 6へのリンクには、次のように記載されています。

    これらのDIコンテナアダプタは参考用です。 彼らは最終的にそれぞれのコンテナ所有者の によって取り除かれ交換されることを期待しています。

    マイクロソフトは、サードパーティプロバイダーを維持する責任を負うべきではありません。

    • ライブラリは

    無名のリポジトリにかなり深く埋設されているあなたが気づいていない場合は、ASP.NET 5はまだ開発中です。ベータ7はプレリリースとしてナゲットで利用可能ですが、他のソースもあります。

    これらのソースはMicrosoftによって維持されています。

    • オンライン実際Ninjectリソースそれを任意の新しい開発、サードパーティのライブラリー・プロバイダーと同じよう

    に言及したことがない、彼らは彼らの製品の実装を提供しますとき(すべてであれば)自身が判断しなければなりません新しいコードベースをサポートします。そのためには、新しいフレームワークが公式に公開されるまで待つことが最も効率的であると見なされることがあります。サポートが実装されるかどうかは、もちろん、プロバイダのリソース、および/またはオープンソースの場合はコミュニティです。構築、維持し、内蔵のDIシステムの新しいASP.NET用のアダプタをサポートするかどうかを

    38

    は、既存の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です(herehereについて詳しく説明しました)。 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は[彼らの]ビジョンを覆っている"ため、マイクロソフトは進歩を止めているようだ。

    +0

    洞察力のあるポストをありがとう、DIコンテナに組み込まれていない大きな問題は、慣例に基づくマッピングがないことです。私は、私のスタートアッププロジェクトの下にあるすべての単一のプロジェクトを組み込み、依存関係をマップしなければなりません。私は何かが欠けていない限り、これは巨大な誤解のように思えます。 – Spets

    +3

    @Spets組み込みのコンテナは、特にASP.NET自体の構成システムを意味します。これは、ASP.NETの一部を簡単に交換できることを意味し、サードパーティコンポーネントは同じ構成モデルを使用できます。組み込みコンテナはそのモデルを基に構築されているため、一部の機能が実装されていない理由が説明されています。バッチ登録は、コンテナの上に自分自身を書くことが非常に簡単であり、魅力的なDIライブラリになるためには、もっと重要な機能を最初に実装する必要があります。しかし、やはり自分のタイプを登録するためにDIシステムを乱用しないでください。 – Steven

    +0

    これは意味をなさない。 – Spets

    関連する問題