この質問は StructureMap に関連していますが、私の一般的な質問は次のとおりです。
( xml経由で構成するのではなく)コードで IoC コンテナーを使用してコンポーネントを接続する場合、通常、すべてのアセンブリへの明示的なプロジェクト/ビルド参照が必要ですか?
なぜ別々のアセンブリですか?なぜなら:
「具体的な実装とは別のアセンブリに存在する抽象クラスは、そのような分離を実現する優れた方法です。」-フレームワーク設計ガイドライン p.91
例:
PersonBase.dllとBob.dllがあるとします。
Bobは、抽象クラスPersonBaseから継承します。どちらもPerson名前空間にあります。しかし、別のアセンブリで。
BobではなくPersonBaseにプログラミングしています。
メインコードに戻ると、人が必要です。StructureMap はアセンブリをスキャンできます。よし、StructureMap に頼んでみよう!
さて、私のメイン コードでは、もちろん、 BobではなくPersonBaseのみを参照しています。実際、自分のコードでBobについて何も知りたくありません。プロジェクトの参照も、nuthin もありません。それが要点です。
だから私は言いたい:
//Reference: PersonBase.dll (only)
using Person;
...
//this is as much as we'll ever be specific about Bob:
Scan( x=> { x.Assembly("Bob.dll"); }
//Ok, I should now have something that's a PersonBase (Bob). But no ?
ObjectFactory.GetAllInstances<PersonBase>().Count == 0
運がない。うまくいくのは、私がボブを欲しがっていることを明示することです:
//Reference: PersonBase.dll and Bob.dll
using Person;
...
Scan( x => {x.Assembly("Bob.dll"); }
//If I'm explicit, it works. But Bob's just a PersonBase, what gives?
ObjectFactory.GetAllInstances<Bob>().Count == 1 //there he is!
しかし今、プロジェクトでBob.dllを参照する必要がありましたが、これはまさに私が望んでいなかったものです。
Spring + Xml 構成を使用して、この状況を回避できます。しかし、Spring + Xml 構成に戻ります ... !
StructureMap を使用して何か不足していますか、または一般的な原則として、(流暢な) IC 構成にはすべてのアセンブリへの明示的な参照が必要ですか?
おそらく関連する質問:StructureMap とスキャン アセンブリ