2011-09-27 7 views
6

私は真剣にIoCコンテナの使用は、(少なくともそれはさまざまな不要な機能を使用しようとすると私を誘発する)overdesignedソリューションを作成すると思います。IoCコンテナの反パターン。なぜIoCコンテナはとても複雑で、 "派手な"方法で使用されていますか?

は、これは、1つの。..

私の短い経験

が、一部のインフラシングルトンを解決して開始することを、起動時にアプリケーションごとに一度Resolveメソッドを呼び出すために絶対的に十分であることを伝える社会と私「のIoC」アンチパターンのリストを同期する時が来ました彼らは新しい「より小さな生涯の穀物工場」を生み出すことができる「一時的な物体の工場」である。 10個のコードラインを工場に追加することで、それらのファクトリを安全にスレッド化する(たとえば、スレッドごとに1つのインスタンスを作成する)ことさえ容易です...まだ、これらのファクトリは、「ライブラリのIoCツールとの統合」よりはるかに単純です。傍受?自分のラッパーを作成してください...ライフマネージャー/依存戦略/親コンテナ?ブートストラッパーでResolveを一度だけ呼び出すと、それについて考えることはありません。

デベロッパーが異なるアプリケーションレイヤーで複数回解決(コンテナを渡すか、デリゲートをコンテナに渡す)してから何か考えてもらいたいことを理解できたら助かりますか?私は本当に何かが恋しいことを心配しています。

+2

良い点。これを解除することはできますか? –

答えて

0

私の目には他のアンチパターンは、コンテナ「より深く」そして実際bootsrapperの初期化を推進しています。例えば

Unity and WCF recommendations

ブートストラップWCFアプリでサービスのコンストラクタで、そしてちょうどコンストラクタに、コンテナの初期化を入れました。私は、あなたが "IoCコンテナフリー"ブートストラップを持っていたい場合、あなたが "IoCコンテナフリー"サービス契約を実装する必要があるならば、それは不合理である、ということは、wcf sevice behaiviorsとcustome sevice host factoryをプログラミングするために推薦する理由を理解していない。 2番目の "IoCコンテナフリー"サービス契約の実装を作成するだけです。

1

は明らかに間違って何かを

Thisをお読みください。新しいライブラリは複雑なコードを追加するべきではありません。

1

ある種のIoCは、アンチパターンである場合もあります。たとえば、service locator antipatternです。しかし、アプリケーションの開始時にコンストラクタインジェクションを使用している場合は、それだけで、になり、アンチパターンにつながりません。

クラス内でDIコンテナインターフェイスを注入するのは、コンストラクタインジェクションを誤って使用することです。 DIがクラスのビジネスロジックの一部でない場合、DIコンテナを認識したり依存したりする必要はありません。また、IKitchenに依存する必要もありません。あなたの依存性注入コンテナと一緒に働く何らかのヘルパーやサービスにあなたのDIコンテナを注入するのはうれしいことです。なぜなら、それは目的がDIコンテナと一緒に働くことだからです。あなたが提供するリンクの例は、IoCの悪用です。 IoCが一般的に反パターンであることを意味するものではありません。

正しい質問は「コンストラクタインジェクションはアンチパターンにできますか?」と思います。これまでのところ、私はそのような状況に直面するまで、どんな状況にも直面していないか、それがどこにあったかを見て "ノー"と言うことはありませんでした。

2

IoCコンテナを使用する方法がわからないときは、単純な依存性注入よりも複雑すぎると思ったので、使用をやめることにしました。

IoCがなくても、オーバーインジェクションのケースに入る可能性はありますが、それは当てはまります。 しばらく前に、私は心を開いた人の著者からいくつかの記事を読んだ。

インジェクタは、コンテキストルート内でのみ使用するようにしてください。しかし、過剰注入を避けるために、注入された工場のルールの例外を導入することに決めました。

私のフレームワークでは、工場(および工場のみ)はインジェクタコンテナを使用できます。ファクトリはコンテキストルートのコンテナにバインドされているため、注入することができます。ファクトリは有効な依存関係になり、依存性注入を容易にするためにインジェクタコンテナを使用して、他のオブジェクト内に新しいオブジェクトを作成するために使用されます。

+0

はい!私はあなたに完全に同意します。工場にコンテナの使用を許可するのはOKですが、何が代替品なのでしょうか?手作業で再びオブジェクトを「新しくする」?私は、人々がこれらの概念の背後にある理論を、生産性ツールとして使うのではなく、あまりにも諦めてしまうと思います。 –

関連する問題