有一个打字的工厂:
public interface IDataProviderFactory
{
IDataProvider Create(ConfigurationItem configurationItem);
void Release(IDataProvider dataProvider);
}
IDataProvider
有一个配置类:
public class ConfigurationItem
{
public CalculatorsEnum CalculatorsEnum { get; set; }
public DataPriversEnum DataPriversEnum { get; set; }
}
当我试图调用工厂的方法Create时,Windsor正在尝试解析IDataProvider的依赖关系,即ICalculator。
这里我需要容器使用原始参数中的信息,以便了解要使用哪个版本的ICalculator。
更新
我想补充一些细节:
可能的解决方案:
答案 0 :(得分:1)
构造函数参数仅传递给正在解析的顶级服务的构造函数。这是设计的。
推荐的解决方案是建立一个解决ICalculator和IDataProvider的工厂。在解析时,您将明确解析ICalculator,然后将其传递给IDataProvider的工厂函数。
有关进一步的讨论,请参阅this question。
<强>更新强>
是的,每个Resolve都应该有一个匹配的Release,无论是直接使用工厂还是容器,都是如此。
只是猜测是什么&#34;温莎的方式&#34;解决您的特定情况可能是。
Windsor提供了许多指定内联依赖项的不同方法。有关详细信息,请参阅here。通常,所概述的方法优于使用工厂等,因为解析/释放由容器管理。