gpt4 book ai didi

dependency-injection - 依赖注入(inject)/控制反转的序列化配置

转载 作者:行者123 更新时间:2023-12-04 08:23:49 26 4
gpt4 key购买 nike

我最近一直在研究依赖注入(inject)和控制反转实践,以改进我们的应用程序框架的架构,但我似乎找不到这个问题的好答案。很可能我的术语混淆了,混淆了,或者我现在对这个概念很天真,所以任何链接或澄清将不胜感激。

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>

最佳答案

我不了解 mef,但 Spring 使用与您描述的几乎完全相同的方法(由 XML 文件或配置部分配置的注入(inject))完全按照您的描述进行:

<objects>
<object name="FastCar" type="MyApp.Car">
<constructor-arg>
<ref object="FastEngine">
</constructor-arg>
</object>
<object name="SlowCar" type="MyApp.Car">
<constructor-arg>
<ref object="SlowEngine">
</constructor-arg>
</object>
<object name="FastEngine" type="MyApp.FastEngine"/>
<object name="SlowEngine" type="MyApp.SlowEngine"/>
</objects>

关于dependency-injection - 依赖注入(inject)/控制反转的序列化配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3001330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com