c# - CaSTLe Windsor 注册多个实例

标签 c# castle-windsor

我正在尝试根据构造函数名称注册我的数据库的不同实例。我熟悉 CaSTLe Windsor 中的“first wins”概念,但显然我并不完全理解它。

我希望下面的 uaxDB 参数名称通知 ControllerInstaller 给我带有 UAXmongoURL、UAXmongoConnection 参数的实例。相反,我得到第一个实例,使用 USERmongoURL 和 USERmongoconnection 参数。所以...先赢,但即使我使用命名实例?我该如何修复,以便命名实例胜过任何默认排序?

请注意,我不只是想交换两个组件的顺序,因为我即将拥有更多实例,所以我需要扩展到 2 以上....换句话说,我真的需要了解什么我做错了。

// Trying to avoid this constructor declaration in favor of the uncommented constructor
// public DBViewerModel(IMongoConnection devDB, IMongoConnection uaxDB, IMongoConnection prodDB)
public DBViewerModel(IMongoConnection mongoConnection)
{
    //this.devMongoConnection = devDB;
    //this.uaxMongoConnection = uaxDB;
    //this.prodMongoConnection = prodDB;
    this.mongoConnection = mongoConnection;
}

注册...

container.Register(
    Component
        .For<IMongoConnection>()
        .Named("dataDB")
        .ImplementedBy<MongoConnection>()
        .DependsOn(Property.ForKey("DBlocation").Eq(USERmongoURL),
                   Property.ForKey("DB").Eq(USERmongoCollection))
        .LifeStyle.PerWebRequest,

    Component
        .For<IMongoConnection>()
        .Named("uaxDB")
        .ImplementedBy<MongoConnection>()
        .DependsOn(Property.ForKey("DBlocation").Eq(UAXmongoURL),
                   Property.ForKey("DB").Eq(UAXmongoCollection))
        .LifeStyle.PerWebRequest);

最佳答案

您可以明确指定应该通过服务覆盖注入(inject)的组件:

https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md#supplying-the-component-for-a-dependency-to-use-service-override

这是较老的方法。如果您使用的是最新版本的 Windsor,最好使用 DependsOn(Dependency.OnComponent("uaxDB", "uaxDB")) API。

关于c# - CaSTLe Windsor 注册多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300214/

相关文章:

c# - 我可以使用什么 Linq 查询按类别返回所有产品的计数?

c# - 模型或 View 模型应该处理模型属性的延迟加载吗?

c# - 如何从 Apache NMS ActiveMQ 消息中获取底层流句柄

c# - 将 Windsor Logging Facility 安装到图书馆中

c# - CaSTLe Windsor 命名空间冲突

c# - 在 WPF 项目中,如何初始化窗口和控件,然后跳转到主循环?

c# - 由于 c# 组件中的 AutoMapper.Map,内存会随着每个请求而增加

c# - 使用 CaSTLe Windsor 进行依赖注入(inject)的多态性

model-view-controller - SportsStore : MVC programming issue [CaSTLe WindsorControllerFactory]

caSTLe-windsor - TypedFactoryFacility : Passing null argument