最近我一直在研究依赖注入和控制反转的实践,以改进我们应用框架的架构,但是我似乎找不到一个好的答案。很可能是我的术语混淆了,或者我对这个概念还很幼稚,所以希望能提供任何链接或澄清。
许多 DI 和 IoC 容器的示例并没有说明当你有一个“插件”库时,容器将如何连接这些插件,或者如何“序列化”给定的配置。(从我读过的有关 MEF 的内容来看,如果您的对象只需要 1 个 [Import],那么为同一类型声明多个 [Export] 将无效)。也许这是一种不同的模式,或者我被当前的思维方式蒙住了眼。
以下是一个示例参考代码:
本文讨论了“细粒度上下文”概念,其中两个同一对象实例需要不同的“引擎”类实现: IoC.Resolve vs Constructor Injection 是否有一个很好的框架可以帮助您配置或序列化配置以实现这样的目标,而不是硬编码或手动编写代码来完成?
许多 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;
}
本文讨论了“细粒度上下文”概念,其中两个同一对象实例需要不同的“引擎”类实现: 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>