解析服务时,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
依赖于 DbReportingConfig
,PlayerDomainService
依赖于 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 应该可以帮助您设置服务覆盖
同一服务类型我有两个组件。当 运行 个应用程序时,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
依赖于 DbReportingConfig
,PlayerDomainService
依赖于 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 应该可以帮助您设置服务覆盖