【问题标题】:Castle Windsor: UsingFactoryMethod can't instantiate with a weird errorCastle Windsor:UsingFactoryMethod 无法实例化并出现奇怪的错误
【发布时间】:2009-12-03 05:44:43
【问题描述】:

当我使用这个注册时:

container.Register(
    Component
        .For<IFooFactory>()
        .ImplementedBy<FooFactory>(),
    Component
        .For<IFoo>()
        .UsingFactoryMethod(kernel => kernel.Resolve<IFooFactory>().CreateFoo())
);

我得到了这个例外:

Castle.MicroKernel.ComponentRegistrationException:类型 MyNamespace.IFoo 是抽象的。 因此,不可能将其实例化为 MyNamespace.IFoo 服务的实现

我不太确定问题出在哪里。但是堆栈跟踪显示在'DefaultComponentActivator.CreateInstance()'中,以下条件成功然后抛出错误:

if (createProxy == false && Model.Implementation.IsAbstract)

我在这里需要某种代理吗? 注册错了吗?

【问题讨论】:

    标签: castle-windsor ioc-container


    【解决方案1】:

    从消息看来,您还没有注册IFooFactory

    您还需要添加对工厂方法的支持。只需在注册之前调用它:

    container.AddFacility<Castle.Facilities.FactorySupport.FactorySupportFacility>();
    

    【讨论】:

    • IFooFactory 已注册。我错过了对 AddFacility() 的调用。谢谢!
    • 请注意,自 Windsor 2.5 起,FactorySupportFacility 不再需要(欢呼!)
    • 非常感谢——这让我发疯了!我正在为不同的解决方案使用更高版本的 Windsor,但没有意识到旧版本的 Windsor 需要这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多