【发布时间】:2011-03-01 09:19:51
【问题描述】:
我最近一直在研究依赖注入和控制反转实践,以努力改进我们的应用程序框架的架构,但我似乎找不到这个问题的好答案。很可能我的术语混淆了,混淆了,或者我现在对这个概念很天真,所以任何链接或澄清将不胜感激。
DI 和 IoC 容器的许多示例并未说明当您拥有可能的“插件”“库”时容器如何将事物连接在一起,或者如何“序列化”给定配置。 (根据我所读到的有关 MEF 的内容,如果您的对象只需要 1 个 [Import],则为同一类型声明多个 [Export] 将不起作用)。也许这是一种不同的模式,或者我被我目前的思维方式蒙蔽了双眼。
以下是示例参考的一些代码:
public abstract class Engine {
}
public class FastEngine : Engine {
}
public class MediumEngine : Engine {
}
public class SlowEngine : Engine {
}
public class Car
{
public Car(Engine e)
{
engine = e;
}
private Engine engine;
}
这篇文章讨论了“细粒度上下文”,其中同一对象的 2 个实例需要“引擎”类的不同实现:IoC.Resolve vs Constructor Injection
是否有一个好的框架可以帮助您配置或序列化配置以实现类似的目标,而无需硬编码或手动滚动代码来执行此操作?
public class Application
{
public void Go()
{
Car c1 = new Car(new FastEngine());
Car c2 = new Car(new SlowEngine());
}
}
示例 XML:
<XML>
<Cars>
<Car name="c1" engine="FastEngine" />
<Car name="c2" engine="SlowEngine" />
</Cars>
</XML>
【问题讨论】:
-
感谢那些提供答案的人。虽然其他答案给出了特定于框架的示例,但公认的答案指出,许多 DI 框架能够通过 XML 配置(Unity、Spring 等)实现这一点。您可以根据平台和偏好确定使用哪一个。
标签: dependency-injection ioc-container mef