2

コンストラクター名に応じて、データベースの別のインスタンスを登録しようとしています。キャッスル ウィンザーの「先制」の概念はよく知っていますが、完全には理解していないようです。

UAXmongoURL、UAXmongoConnection パラメーターを使用してインスタンスを提供するよう ControllerInstaller に通知するために、以下の uaxDB パラメーター名を使用したいと思います。代わりに、USERmongoURL および USERmongoconnection パラメータを使用して、最初のインスタンスを取得しています。それで...最初に勝ちますが、名前付きインスタンスを使用した場合でも? 名前付きインスタンスがデフォルトの順序より優先されるように修正するにはどうすればよいですか?

2 つのコンポーネントの順序を交換したいだけではないことに注意してください。インスタンスをさらに増やして、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);
4

1 に答える 1

3

サービスのオーバーライドによって注入されるコンポーネントを明示的に指定できます。

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 を使用することをお勧めします。

于 2012-11-09T08:01:34.710 に答える