Замок Виндзор: Использование FactoryMethod не может быть создано с странной ошибкой - PullRequest
4 голосов
/ 03 декабря 2009

Когда я использую эту регистрацию:

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)

Мне нужен какой-нибудь прокси здесь? Регистрация неверна?

1 Ответ

10 голосов
/ 03 декабря 2009

Судя по сообщению, вы не зарегистрировали IFooFactory.

Также необходимо добавить поддержку заводского метода. Просто позвоните перед регистрацией:

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