1

コンポーネントをSPIを介して動的にルックアップおよびロードできるようにするJavaのjava.util.ServiceLoaderに類似したものはありますか?

かさばるDIコンテナーや自分で作成するのではなく、インターフェイスのプロバイダーを簡単にプラグインできる.NETの軽量のネイティブ機能を探しています。

更新:Javaのようにネイティブに組み込まれているSPI機能がないため、これは.NETではすぐに利用できないようです。私が求めているものに最も近いので、最初の答えを受け入れました。

4

2 に答える 2

6

ネイティブのIServiceProviderインターフェイスがあります。

とはいえ、.NETで利用できる非常に豊富なIoCコンテナはたくさんあります。

  • キャッスルウィンザー
  • 団結
  • AutoFac
  • NInject

いくつか例を挙げると。これらの多くはかなり軽量です。また、オブジェクトの存続期間管理(シングルトン、スレッドごとなど)やAOP(アスペクト指向プログラミング)機能などの高度な機能も提供します。

とは言うものの、本当に軽量で依存関係がない場合は、約30行のコードで独自のコードを作成できます。

于 2012-04-24T04:38:39.677 に答える
0

@ JeffN825が言ったように、これらは.NETのネイティブコンテナではありません。

とはいえ、かさばるとはどういう意味ですか?たぶん、Service Locatorパターンの主な欠点を参照します。どこにでもコンテナーへの参照があり、かなり侵襲的です。

コンポジションルートパターンを使用すると、コンテナの使用をアプリケーション内の1つの場所に任せることができ、コンテナを使用することによる影響を軽減できます。このようにして、「バルク」を排除します。一度構成し、一度使用すると、忘れてしまいます。


アップデート

あなたのコメントに答える:多くのIoCコンテナには、あなたのニーズを満たすかもしれないある種の自動登録機能があります。たとえば、関連する構造マップのドキュメントページへのリンクは次のとおりです。

次に、IoCコンテナに、実装のさまざまな構成(つまり、実際の実装ではなくスタブ)を使用してさまざまなアセンブリを選択させることができます。

于 2012-04-24T08:30:39.430 に答える