質問

私は大規模なジレマにいます。私はASP.NET MVC 2の高度にモジュラーWebアプリに取り組んでいます(実際、コアは非常に軽量で、すべてモジュール/プラグインで作業します)。 MEFはモジュールのディスカバリーにかなり便利だと感じましたが、IOCコンテナとして私たちを望んでいません。 「真の」IOCコンテナの高度な機能が必要になる可能性が非常に高いので、Unityを使用したいと思います。

問題は次のとおりです。モジュールがコンテナを構成できるようにする方法(プログラムで)=すべてのモジュールのユニティに依存せずにアプリケーションの開始時に独自のタイプ(MVCコントローラー、サービスのカスタム実装...)を登録する方法は?私は一般的なサービスロケータープロジェクトについて知っていますが、それはかなり良いようですが、このインターフェイスCOコンテナは、それらを登録するのではなく、タイプを解決することのみを可能にします(AFAIK)。

私はあなたが私のポイントを理解できることを本当に願っています、私は私の英語がひどいことを知っています(私は英語以外の国から来ました:)どうもありがとう!

役に立ちましたか?

解決

MEFをDIコンテナとして使用したくないことに確かに同情することができますが、それがあなたのアドインに適用されないかもしれないかどうかを検討する必要があると思います。

君は MEFを使用するには、すでにアドインが必要です, 、したがって、彼らはすべてそれに大いに依存します。私は個人的には、MEFが使用するハードコード化された属性ベースのアプローチが好きではありませんが、各アドインがDIコンテナにどのように登録できるかを尋ねているように聞こえます。それは私にとってもハードコーディングのように聞こえるので、MEFをずっと使用することもできます。

MEF属性の適用 コンポーネント登録。

MEFを実際に使用したくない場合は、他にもいくつかのオプションしかありません(特に魅力的なものはありません):

  • また、すべてのアドインが団結に依存するように要求します。私はあなたがこれをやりたくない理由を完全に理解していますが、完全性のためにこのオプションを含んでいます
  • また、一般的なサービスロケーターに大いに依存するようにすべてのアドインを要求します。私の見解では、これは問題をわずかにシフトするだけです。
  • 独自のアドイン登録インターフェイスを定義します すべてのアドインが実装する必要があること。その後、Unityを使用する独自の実装を記述することができます。これにより、すべてのアドインがこのインターフェイスに対して自分自身を登録するようになりますが、MEFの機能を複製するだけです。
  • すべてのアドインをaに書き込みます diフレンドリーですが、コンテナに依存します スタイル。これにより、DIコンテナの構成に関する問題が発生し、そのためにXML構成に頼る必要があります。これは非常にです 脆い アプローチし、すぐにつながる可能性があります 地獄の維持, 、だからもう一度、完全性のためにこのオプションを含めています。

アドインにMEFを使用することは、コアアプリケーションでUnityを使用することを妨げることはありませんが、それは非常に軽量であることを理解しているので、それはあまり意味がないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top