繁体   English   中英

温莎城堡注册多个实例

[英]Castle Windsor register multiple instances

我正在尝试根据构造函数名称注册我的数据库的不同实例。 我熟悉温莎城堡中的“首胜”概念,但显然我并不完全理解它。

我希望下面的 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);

您可以明确指定服务覆盖应该注入哪个组件:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM