Chris
Chris

Reputation: 28064

Resolving multiple services using constructor injection with Windsor in MVC3

I have a controller that takes an instance of ICustomerService. The constructor for one of my implementations (ok, the only implementation atm) takes an array of ICustomerExporter instances.

I'm registering all implementations of ICustomerExporter using the following code:

_container.Register(AllTypes
    .FromAssembly(typeof(ICustomerExporter).Assembly)
    .BasedOn<ICustomerExporter>().LifestyleSingleton());

And my DefaultCustomerService implementation looks like:

public DefaultCustomerService(ISession session, ICustomerExporter[] exporters)
{
    this._session = session;
    this._exporters = exporters;
}

However, when I try to run the app, I get the following error:

PM.Services.Implementation.DefaultCustomerService' is waiting for the following  
dependencies: - Service 'PM.Services.ICustomerExporter[]' which was not registered.

Well pretty clearly it IS registered, I can even stop in the debugger and verify in the container's component list that the ExcelCustomerExporter implementation is there. So why am I getting this error message?

Upvotes: 0

Views: 453

Answers (2)

Chris
Chris

Reputation: 28064

Just to answer this question for anyone who comes along, when registering multiple services like this, you must do 2 things:

Upvotes: 0

Paul
Paul

Reputation: 36319

Looks like you're registering for ICustomerExporter, but I don't know that Windsor will assume that an implementation of ICustomerExporter will always satisfy your ICustomerExporter[] dependency. Have you tried registering a ICustomerExporter[] dependency also?

Upvotes: 1

Related Questions