有一个类型化工厂:
public interface IDataProviderFactory { IDataProvider Create(ConfigurationItem configurationItem); void Release(IDataProvider dataProvider); }
IDataProvider 有几种实现
- 一些实现依赖于 ICalculator
- ICalculator 有几种实现
有一个配置类:
public class ConfigurationItem { public CalculatorsEnum CalculatorsEnum { get; set; } public DataPriversEnum DataPriversEnum { get; set; } }
当我尝试调用工厂的方法 Create 时,Windsor 正在尝试解析 IDataProvider 的依赖项,即 ICalculator。
在这里,我需要容器使用原始参数中的信息,以便了解要使用哪个版本的 ICalculator。
更新
我想补充一些细节:
- 有一个类我使用 IDataProviderFactory。在那里我控制 IDataProviders 的生命周期,我不时使用工厂创建和销毁它们。所以在这个级别上,我不想知道任何关于 IDataProvider 实现的信息——可能有没有计算器的 DataProvider。
- 一开始我有自己的 IDataProviderFactory 实现,我可以在其中解析 ICalculator 并将其注入 DataProvider。但是在回收方面,我正在处理 DataProvider,但是在 Windsor 的情况下,当您手动解决某些问题时,处理似乎是不够的,您需要显式释放它。
可能的解决方案:
- 我仍然可以手动完成所有这些,但很可能我会通过一些演员来打破美感。
- 如果需要,我可以将 Calculators 的类型化工厂注入 DataProviders 实现,并在那里控制 Calculator 的生命周期。例如:我用我的工厂创建了 DataProvider,然后我不需要它,我释放它,容器将调用 DataProvider 的 dispose,我将在其中释放带有自己工厂的计算器。
- 温莎方式?