2012-11-09 144 views
2

我想根據構造函數名稱註冊我的數據庫的不同實例。我熟悉溫莎城堡的「第一場勝利」概念,但顯然我並不完全理解它。Castle Windsor註冊多個實例

我想下面的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); 
+0

你真的需要不同的註冊嗎?難道你沒有一個實現從配置文件讀取連接字符串,然後更改你的環境的配置值? – TylerOhlsen

+0

但我將同時運行這兩個實例。一個不同的模型會將另一個實例注入到一個應用程序中。 – goldfinger

+0

您可以顯示您的組件註冊DBViewerModel的示例,並進一步將您的圖層上傳到您實際選擇使用「dataDB」或「uaxDB」的位置? – TylerOhlsen

回答

相關問題