2015-11-11 172 views
2

假設我有一個組件,它目前在我的界面ICache上有一個依賴項,並且使用構造函數注入在基於DB的Cache實現中註冊。事情是這樣的:在Castle Windsor註冊多個相同接口的實現

container.Register(Component.For<ICache>() 
          .ImplementedBy<DatabaseCache>() 
          .LifeStyle.Singleton 
          .Named("dbcache")); 

,然後我的組件註冊它:

container.Register(Component.For<IRepository>() 
          .ImplementedBy<CoolRepository>() 
          .LifeStyle.Singleton 
          .Named("repo") 
          .DependsOn(Dependency.OnComponent(typeof(ICache), "dbcache"))); 

但如果我想我的組件,以便能夠利用不同類型的第二ICache依賴於同時?我如何將2個不同的相同接口的實現注入到主要組件中?

回答

5

使用接受字符串作爲第一個參數的Dependency.OnComponent的過載。這是將爲其提供依賴關係的構造函數中的參數的名稱。例如,如果你的CoolRepository構造是這樣的:

public CoolRepository(ICache first, ICache second) 
{ 
    // ... 
} 

您的註冊看起來就像這樣:

// register another cache 
container.Register(Component.For<ICache>() 
          .ImplementedBy<DummyCache>() 
          .LifeStyle.Singleton 
          .Named("otherCache")); 

container.Register(Component.For<IRepository>() 
          .ImplementedBy<CoolRepository>() 
          .LifeStyle.Singleton 
          .Named("repo") 
          .DependsOn(Dependency.OnComponent("first", "dbcache")) 
          .DependsOn(Dependency.OnComponent("second", "otherCache"))); 

查看更多細節here

+0

很酷,謝謝你帕特里克,完美​​的工作,我正在尋找某種重載來做我想做的事,但我沒有檢查OnComponent()的重載。 – snappymcsnap

相關問題