IoC に関する最近の Alt.NET グループに参加した後、利用可能なツールと、それらがどのように機能するかについて考えるようになりました。 StructureMap
特に、属性とブートストラップの概念の両方を使用して、 のリクエストを にマップIThing
しますConcreteThing
。属性は、リフレクションまたは IL インジェクションのいずれかが進行中であることを示すフラグを自動的にスローします。これがどのように機能するか (StructureMap
または他の IoC ツールの場合) と、関連するオーバーヘッドが実行時またはコンパイル時にどのようになるかを正確に知っている人はいますか?
4 に答える
他の IoC ツールキットについてはあまり言えませんが、私は Spring.Net を使用しており、起動時に 1 回限りの初期パフォーマンス ペナルティがあることがわかりました。コンテナーが構成されると、アプリケーションは影響を受けずに実行されます。
私はCastleProjectの Windsor を使用していますが、依存関係を減らすのに非常に役立つことがわかりました。パフォーマンスの問題にはまだ気づいていませんが、1 つだけわかっているのは、構成が少し面倒になる可能性があることです。この点を支援するために、boo で書かれた Windsor 用の DSL である Binsor に注目し始めています。
注意すべきもう 1 つのことは、コードをナビゲートするときに、実行時に実行されるコードに移動できないことです。
それらの主な問題は、コードが理解しにくくなることです。IoC を使いすぎると、魔法のようになるかもしれません。もう 1 つの問題はパフォーマンスです。ほとんどの場合、パフォーマンスの低下は目立ちません。しかし、IoC コンテナーを介してほとんどのオブジェクトを作成し始めると、突然海面より下に落ちることがあります。
ここに、非常に軽量で基本的なIOCを作成しました。
http://blogs.microsoft.co.il/blogs/shay/archive/2008/09/30/building-custom-object-mapper.aspx
あなたが言及したライブラリに代わるものではありませんが、必要なのはそのインターフェースを与えることによって型を解決することだけであれば、それは完璧な解決策かもしれません。
インスタンス化タイプ (シングルトン、トランジェント、スレッド、プールなど) は処理しません。すべてのオブジェクトはシングルトンとしてインスタンス化されます。次のように呼び出します。
IRepository _repository = ObjectFactory.BuildFactory<IRepository>();
シェイ