Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Castle Windsor: UsingFactoryMethod can't instantiate with a weird error

When I use this registration:

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

I get this exception:

Castle.MicroKernel.ComponentRegistrationException: Type MyNamespace.IFoo is abstract. As such, it is not possible to instansiate it as implementation of MyNamespace.IFoo service

I'm not really sure what the problem is. But the stack trace shows that in 'DefaultComponentActivator.CreateInstance()', the following condition succeeds and then the error is thrown:

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

Do I need a proxy of some sort here? Is the registration wrong?

like image 667
shovavnik Avatar asked Dec 29 '22 09:12

shovavnik


1 Answers

From the message it seems you haven't registered the IFooFactory.

Also You need to add support for the factory method. Just call this before you doing the registration:

container.AddFacility<Castle.Facilities.FactorySupport.FactorySupportFacility>();
like image 101
Dmytrii Nagirniak Avatar answered Apr 26 '23 17:04

Dmytrii Nagirniak