c# - 为什么我的 WindsorContainer 不能解析 IWindsorContainer?

标签 c# inversion-of-control castle-windsor

这个例子并没有通过使用 IServiceLocator 来包装我的 Container 来使用最佳实践,但它让我有点困惑。

我认为 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);

不过这对我来说有点奇怪,我是不是做错了什么?

最佳答案

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

正如您自己所说,传递容器本身通常不是一个好习惯。大多数情况下,您应该使用工厂,也许是通过类型化的工厂设施。

关于c# - 为什么我的 WindsorContainer 不能解析 IWindsorContainer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550947/

相关文章:

wpf - WPF MDI 应用程序中的组合根在哪里?

c# - 如何根据整数用户输入打印枚举值?

inversion-of-control - 使用 Unity IOC 时出现 StackoverflowException

javascript - 是否有用于 javascript 的任何反转控制框架?

c# - CaSTLe Windsor注册接口(interface)

c# - 使用 CaSTLe Windsor 的异步 MVC 操作

c# - MvxBind 单击按钮在 MvxGridView 中不起作用

c# - OAEP RSA 参数与 RSACryptoServiceProvider.Encrypt

c# - 无法在非静态上下文中访问静态方法

asp.net-mvc - 具有延迟加载问题的工作单元方法、nHibernate、ASP.NET MVC、CaSTLe Windsor