解析服务时,Castle 总是加载第一个组件

Castle always load the first component when resolving a service

同一服务类型我有两个组件。当 运行 个应用程序时,Castle 总是加载第一个组件。例如,我有一个指向不同数据库的 IDbConfiguration 服务,以及 IDbconfiguration:

的两个组件
<component id="DbConfig" 
    service="Maloft.Keryx.Infrastructure.RepositoryFramework.IDbConfiguration, Keryx.Infrastructure"
    type="Maloft.Keryx.Infrastructure.RepositoryFramework.DbConfiguration, Keryx.Infrastructure"
    lifeStyle="PerWebRequest"/>
    <parameters>
        <connectionName>kerxy</connectionName>
    </parameters>
<component id="DbReportingConfig"                    
    service="Maloft.Keryx.Infrastructure.RepositoryFramework.IDbConfiguration, Keryx.Infrastructure"          
    type="Maloft.Keryx.Infrastructure.RepositoryFramework.DbConfiguration, Keryx.Infrastructure"
    lifeStyle="PerWebRequest">
    <parameters>
        <connectionName>kerxyReporting</connectionName>
    </parameters>
</component>

组件 PlayerRepository 依赖于 DbReportingConfigPlayerDomainService 依赖于 PlayerRepository,但是当我解析这些服务中的任何一个时,它们总是加载第一个 DbConfig.

更改 xml 文件中的顺序表明 IDbConfiguration 的第一个组件是每次使用的组件。我为这两个组件设置了不同的Id,为什么总是加载第一个?

该行为是预期的:来自 docs

In Windsor first one wins In Castle, the default implementation for a service is the first registered implementation. This is different from AutoFac for example, where the default is the last registered implementation (http://code.google.com/p/autofac/wiki/ComponentCreation).

现在如果你想在特定的上下文中解析特定的组件,你应该看看service override or dependencies(我更熟悉后者,我觉得后者更明确)。

我没有在 Windsor 中使用 xml 配置,但 this page 应该可以帮助您设置服务覆盖