我正在使用遗留应用程序。在我的长矛时间里,我想用组件初始化进行清理,并将大部分内容移到Windsor(这是我们选择的DI框架)。
不幸的是,在过去,有人决定通过XML配置文件使用Windsor,这真的很复杂......
好的,直接问题。我想根据一些标志或根组件实现注入一组不同的实现,例如,让我说我有FlowA和FlowB,我想要注入这个层次结构:
FlowA:
FlowB:
基本上,有些组件只有一个实现,有些则有所不同。我总是有一些服务实现,一些用于遗留模式,一些用于新流程,一些用于流程的其他特殊变体。
我想到的唯一一件事就是将所有这些工作人员都包装在工厂中,但后来我觉得这只是以某种方式删除DI框架而且我失去了单个组件更改的灵活性。
有没有办法指示Windsor识别某些参数并注入不同的实现?或者我在这里滥用DI。如果是后者,任何建议如何正确处理这种要求分开和旧学校转换(最终隐藏在工厂后面)
谢谢, 麦克
答案 0 :(得分:0)
您可以查看此Named Dependencies
您可以尝试类似
的内容FlowA和FlowB实现IWorkflow
container.Register(Component.For<IWorkflow>().ImplementedBy<FlowA>()
.DependsOn(ServiceOverride.ForKey<IService1>().Eq("SomeService1A")));
container.Register(Component.For<IService1>().ImplementedBy<SomeService1A>()
.Named("SomeService1A"));
通过此操作,您可以为FlowA强制实施特定的依赖SomeService1A。 对所有特定于工作流的依赖项(例如,IFactoryComponenet)执行相同操作