views:

330

answers:

1

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?

+4  A: 

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>();
Dmytrii Nagirniak
The IFooFactory was registered. I was missing the call to AddFacility(). Thanks!
shovavnik

related questions