虽然这个问题与StructureMap有关,但我的一般问题是:
在代码中使用IoC容器连接组件时(而不是通过xml进行配置),您通常需要对所有程序集进行显式项目/构建引用吗?
为什么单独的组件?因为:
"与其具体实现相关的独立程序集中的抽象类是实现这种分离的好方法." - 框架设计指南第91页
例:
假设我有PersonBase.dll和Bob.dll
Bob继承自抽象类PersonBase.它们都在Person命名空间中.但在不同的集会中.
我正在为PersonBase编程,而不是Bob.
回到我的主要代码中,我需要一个人.StructureMap可以扫描装配体.好的,我会问一下StructureMap!
现在,在我的主要代码中,我当然只是指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
Run Code Online (Sandbox Code Playgroud)
没运气.我希望鲍勃做的工作是明确的:
//Reference: …Run Code Online (Sandbox Code Playgroud)