2011-07-01 16 views
2

這個例子沒有使用IServiceLocator來包裝我的Container的最佳做法,但它讓我有點困惑。爲什麼我的WindsorContainer無法解析IWindsorContainer?

我以爲WindsorContainer可以自動將自己解析爲IWindsorContainer?

var container = new WindsorContainer(); 

container.Register(Component.For<INeedWindsorContainer>() 
    .ImplementedBy<GiveMeWindsorContainer>() 
    .LifeStyle.Singleton); 

實施INeedWindsorContainer的:

public class GiveMeWindsorContainer : INeedWindsorContainer 
{ 
    IWindsorContainer _container; 

    public GiveMeWindsorContainer(IWindsorContainer container) 
    { 
     _container = container; 
    } 
} 

這可能不過是不行的,因爲WindsorContainer不知道如何解決IWindsorContainer!

當然,我想出了一個立即解決的是:

var container = new WindsorContainer(); 

container.Register(
    Component.For<IWindsorContainer>() 
     .Instance(container) 
     .LifeStyle.Singleton, 
    Component.For<INeedWindsorContainer>() 
     .ImplementedBy<GiveMeWindsorContainer>() 
     .LifeStyle.Singleton); 

然而,這似乎有點奇怪給我,我做錯了什麼?

回答

6

Windsor可以自動解析IKernel(容器核心,它具有您需要的大部分功能)。

正如你所說,通過容器本身通常不是一個好習慣。大多數情況下,您應該使用工廠,也許是通過打字的工廠設施。

相關問題