TypedFactory 的参数不会被进一步绕过

Parameters of the TypedFactory are not bypassed further

  1. 有类型工厂:

    public interface IDataProviderFactory
    {
        IDataProvider Create(ConfigurationItem configurationItem);
        void Release(IDataProvider dataProvider);
    }
    
  2. IDataProvider有几种实现方式

  3. 一些实现依赖于 ICalculator
  4. ICalculator 有多种实现方式
  5. 有个配置class:

    public class ConfigurationItem
    {
         public CalculatorsEnum CalculatorsEnum { get; set; }
         public DataPriversEnum DataPriversEnum { get; set; }        
    }
    

当我尝试调用工厂方法 Create 时,Windsor 正在尝试解析 IDataProvider 的依赖项,即 ICalculator。

这里我需要容器使用原始参数中的信息,以便了解使用哪个版本的 ICalculator。

更新

我想补充一些细节:

  1. 有一个 class 我使用 IDataProviderFactory 的地方。我在那里控制 IDataProvider 的生命周期,我不时使用工厂创建和销毁它们。所以在这个级别上,我不想了解有关 IDataProvider 实现的任何信息 - 可能有没有计算器的 DataProvider。
  2. 一开始我有自己的 IDataProviderFactory 实现,我可以在其中解析 ICalculator 并将其注入 DataProvider。但是说到回收的时候,我是对DataProvider进行了disposing,但是好像disposing是不够的,万一windsor手动解决的时候,需要显式release。

可能的解决方案:

构造函数参数仅传递给正在解析的顶级服务的构造函数。这是设计使然。

推荐的解决方案是创建一个同时解析 ICalculator 和 IDataProvider 的工厂。解析时,您将显式解析 ICalculator,然后将其传递给 IDataProvider 的工厂函数。

有关进一步讨论,请参阅 this question

更新

是的,每个 Resolve 都应该有一个匹配的 Release,无论是使用工厂还是直接使用容器都是如此。

建议 "the Windsor way" 解决您的特定情况可能只是推测。

Windsor 提供了多种指定内联依赖项的不同方法。有关详细信息,请参阅 here。通常概述的方法比使用工厂等更可取,因为 resolving/releasing 由容器管理。