2009-11-05 34 views
0

我想創建幾個類似的服務,它們的名稱(=鍵)可以被destinguished和訪問。如何創建c'tor依賴的服務的多個組件

服務實現我想要使用c'tor依賴類是這樣的:

public interface IXYService 
{ 
string Tag { get; set; } 
} 

public class _1stXYService : IXYService 
{ 
public _1stXYService(string Tag) 
    { 
     this.Tag = Tag; 
    } 

    public string Tag { get; set; } 
} 

我想什麼是使用「AddComponentWithProperties」將要創建一個具體的實例,它是通過給定的鍵訪問:

... 
    IDictionary l_xyServiceInitParameters = new Hashtable { { "Tag", "1" } }; 
    l_container.AddComponentWithProperties 
     (
      "1st XY service", 
      typeof(IXYService), 
      typeof(_1stXYService), 
      l_xyServiceInitParameters 
     ); 

    l_xyServiceInitParameters["Tag"] = "2"; 
    l_container.AddComponentWithProperties 
     (
      "2nd XY service", 
      typeof(IXYService), 
      typeof(_1stXYService), 
      l_xyServiceInitParameters 
     ); 
... 

var service = l_container[serviceName] as IXYService; 

但是,依賴關係未解決,因此服務不可用。

使用IWindsorContainer.Resolve(...)來填充參數是不需要的。

通過XML構建工程,但並非所有情況下都足夠。

我怎麼能達到我的目標?

+0

所以要通過其Tag屬性來解析服務? – 2009-11-05 15:28:11

+0

所有windsor組件都有一個ID,它是一個字符串。這足夠嗎?還是它必須是您自己的標籤屬性? – 2009-11-05 15:32:21

+0

該ID在使用'AddComponentWithProperties'的情況下是'key'參數,完全適合。在這個例子中,這些是「第一個XY服務」和「第二個XY服務」的鍵。 – apollo 2009-11-05 17:20:01

回答

2

如果你正在尋找定義在註冊時的Tag屬性:

[Test] 
public void Named() { 
    var container = new WindsorContainer(); 
    container.Register(Component.For<IXYService>() 
     .ImplementedBy<_1stXYService>() 
     .Parameters(Parameter.ForKey("Tag").Eq("1")) 
     .Named("1st XY Service")); 
    container.Register(Component.For<IXYService>() 
     .ImplementedBy<_1stXYService>() 
     .Parameters(Parameter.ForKey("Tag").Eq("2")) 
     .Named("2nd XY Service")); 

    Assert.AreEqual("2", container.Resolve<IXYService>("2nd XY Service").Tag); 
} 
+0

謝謝Mauricio,這種方式就像預期的那樣工作! 我想我應該在x-mas的願望清單上寫一本關於「溫莎城堡」的書籍,以瞭解推動物體進出容器的多種方法。 – apollo 2009-11-09 14:33:40

+0

嘿,它正在考慮;-) http://castle.uservoice.com/pages/16605-official-castle-project-feedback-forum/suggestions/327076-we-should-write-a-using-castle-book ?REF =冠軍 – 2009-11-09 14:49:46

相關問題