使用Castle Windsor我可以註冊一個類型的多個實現,例如在Castle Windsor的運行時註冊附加組件實現
container.Register(Component.For<IMyInterceptor>()
.ImplementedBy<MyInterceptor>();
container.Register(Component.For<IMyInterceptor>()
.ImplementedBy<MyInterceptor2>();
這所有的作品,你會期望我能解決您在使用ResolveAll()
多種實現。如果我嘗試雖然註冊在運行時另一實現的實例 - 例如
var interceptor = new MyInterceptor3();
Container.Register(
Component.For<IMyInterceptor>()
.Instance(interceptor));
我得到一個異常:
有一種成分已經註冊給定鍵MyInterceptor3
這是預期的行爲?我試圖達到的目標是使用例如Container.ResolveAll()獲取IMyInterceptor的默認實現列表以及可選的其他實現(即,在啓用調試模式時按請求請求的情況下)。
我collegue向我指出這個鏈接http://stw.castleproject.org/Default.aspx?Page=Registering-components-one-by-one&NS=Windsor&AspxAutoDetectCookieSupport=1 具體做法是: 註冊實例忽略生活方式 當你註冊現有的實例,即使您指定了一種生活方式,它也會被忽略。同時註冊實例,將爲您設置實現類型,因此如果您嘗試手動執行,則會引發異常。 所以它看起來像實例總是單身性質(?) –