Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't pass parameter to Windsor Typed Factory Facility

I've got a IRunningTaskFactory which is registered with Windsor AsFactory() using the Typed Factory Facility. The interface has a single method that looks like this:

RunningTask Create(ITask task);

Where RunningTask is registered with Windsor as being transient has a constructor:

public RunningTask(ITask task, ITaskConfigurationFactory taskConfigurationFactory)

where ITaskConfigurationFactory is registered with Windsor as well.

The problem I'm running into is that when I call the Create method and pass an ITask along I get the following error:

Castle.MicroKernel.Resolvers.DependencyResolverException : Missing dependency. Component Husky.nHuskyTasker.Core.Tasks.RunningTask has a dependency on Husky.nHuskyTasker.Core.Tasks.ITask, which could not be resolved. Make sure the dependency is correctly registered in the container as a service, or provided as inline argument

From what I read in the documentation this should be working.

Thoughts?

like image 588
Shane Courtrille Avatar asked Mar 24 '11 16:03

Shane Courtrille


2 Answers

I had the same problem (runtime parameter into a typed factory not resolving) and it turned out to be because the parameter name on my factory and the name of the constructor parameter on the actual class were different, so when calling .Create() on the typed factory it couldn't resolve my parameter.

This thread solved by issue: Can Castle.Windsor TypedFactoryFacility construct a type with only some ref arguments passed inline?

Not obvious, but it makes sense.

like image 84
Dorian Farrimond Avatar answered Nov 17 '22 11:11

Dorian Farrimond


I found that if you specify a dummy registration for the type with variable instances then your parameter gets passed in without errors:

Component.For<ITask>().ImplementedBy<AnEmptyTask>()

But I agree, this should work without having to have that mock implementation and extra registration.

Note that registering ITask will have the side-effect of Windsor auto-wiring any public properties involving that type, which you may need to suppress

like image 24
Cel Avatar answered Nov 17 '22 10:11

Cel