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?
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With