A.简单的问题。统一:默认和条件解析
我有3个“存储库”实例取决于“配置”。
class Manager{
public Manager(Configuration conf){
...
3个实例解决策略:
container.RegisterType<Repository>("ForService1");
container.RegisterType<Repository>("ForService2");
container.RegisterType<Repository>("ForService3");
(3,因为它们具有不包含到样品的附加参数,即总是不同的参数)
和“默认”的配置
container.RegisterType<Configuration>(new InjectionConstructor(new object[] { false, true }));
我想提供重新定义t他在配置文件中配置一个且只有一个实例。
<register type="Configuration"
name="**ForService2**">
<constructor>
<param name = "useOptimization1" value="True"/>
<param name = "useOptimization2" value="True"/>
</constructor>
</register>
,并希望避免有在扩展类似三重配置:
container.RegisterType<Configuration>("ForService1", new InjectionConstructor(new object[] { false, true }));
container.RegisterType<Configuration>("ForService1", new InjectionConstructor(new object[] { false, true }));
container.RegisterType<Configuration>("ForService2", new InjectionConstructor(new object[] { false, true }));
这可能吗?怎么样?
B.复杂的问题。
我感觉IoC工具不是关于配置。尝试配置基础设施丢弃IoC配置文件 - 又是一个反模式。或更短:“配置信息数据不是依赖性”。我对吗?
让我们观察EntLib的列表器配置。 真的,EntLib的日志监听器配置是“后期绑定”还是“配置方式”?首先,这是“后期绑定”(因为我们指出了类型名称 - 要创建哪个程序集和Loa以及对象),这也是“配置”(我们有自定义配置部分)。我觉得大多数IoC追随者会选择容器的启用“配置”,对吗? 但EntLib人选择配置部分。 可能是这个自定义配置部分日志监听器的配置将改变容器的配置,并且“监听器配置”应该如何与容器配置相关?
谢谢你的回答,马克。但是我需要补充一点,在阅读“首选代码作为配置”链接后,我仍然不同意你的配置和“后期绑定”之间有明确的粗线。我已经向该问题添加了示例。 –