2015-02-06 46 views
7

在溫莎城堡的場景我想檢查我的容器註冊了一定的服務,並做基本上檢查溫莎有一個匹配的組件註冊

if (container.HasComponentFor<IMyService>()) { 
    // resolve service with container.Resolve<IMyService>() 
    // then do cool stuff 
} 

但當然,container.HasComponentFor<IMyService>()不存在。有沒有相同的東西?

回答

18

您可以檢查是否微內核已經註冊組件:

if (container.Kernel.HasComponent(typeof(IMyService))) 
    // resolve service with container.Resolve<IMyService>() 
    // then do cool stuff 
} 
+1

這似乎是最好的選擇。我想我會在'IWindsorContainer'上編寫一個擴展方法來匹配我想要的語法} – 2015-02-06 13:19:54

+0

@TomasLycken我試圖在這段代碼中產生異常 'if(Ioc.Container.Kernel.HasComponent(typeof(myInterface ))) { Ioc.Container.Release(Ioc.Container.Resolve ()); Ioc.Container.Register(Component.For ().Instance(myObjectInstance).LifeStyle.Transient); }' 但是,當我嘗試在if語句內註冊組件時,即使它已經發布,也會導致錯誤。它說該組件已經註冊。我的城堡windsor組件版本是2.5.1 – RBT 2016-03-01 10:20:38

+0

釋放不會從容器中移除組件。如果您需要添加一個覆蓋現有組件的新組件,則只需將其添加爲「IsDefault()」,即if(Ioc.Container.Kernel.HasComponent(typeof(myInterface))) { \t Ioc .Container.Register(Component.For ().Instance(myObjectInstance).IsDefault()。L ifeStyle.Transient); }' – 2016-03-01 15:52:16

2

你可以嘗試container.Kernel.HasComponent()