Matthew,
I can't say for sure without a failing test but a likely cause is at
this point in time not all dependencies are available and that cannot be
determined statically.
I suppose perhaps those objects depend on components registered by
different installers which run after this one, hence at the time you're
resolving the component they are not yet available.
Also resolving things within installers (before full install is
completed) is generally not advocated. I think you may want to look at
the Startable Facility.
cheers,
Krzysztof
On 12/10/2011 3:38 AM, Matthew Brubaker wrote:
I am using Castle Windsor v3.0.0.0 and am getting the following error
when I try to resolve a component from the container.
Castle.MicroKernel.ComponentActivator.NoResolvableConstructorFoundException
: Could not find resolvable constructor for
EnvironmentValidationService. Make sure all required dependencies
are provided.
The registrations happen in an installer that we have written.
public void Install(IWindsorContainer container, IConfigurationStore
store)
{
container.SafeFacilityInstall<TypedFactoryFacility>();
var validators = from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
where
typeof(IEnvironmentValidation).IsAssignableFrom(t)
&& t.IsClass
&& !t.IsAbstract
select t;
foreach (var type in validators) {
_log.DebugFormat("EnvironmentValidationInstaller found and registered
'{0}'", type.Name);
container.Register(Component.For<IEnvironmentValidation>().ImplementedBy(type).LifeStyle.Singleton);
}
container.Register(Component.For<IEnvironmentValidationFactory>().AsFactory());
container.Register(Component.For<EnvironmentValidationExecutor>());
container.Register(Component.For<EnvironmentValidationService>());
var service = container.Resolve<EnvironmentValidationService>();
service.Start();
}
The code throwing the error is in the above installer
var service = container.Resolve<EnvironmentValidationService>();
The definition of those 3 types are as follows
public class EnvironmentValidationService : DelayableTimer,
IDisposable
{
private static readonly TimeSpan seconds_30 = 30.Seconds();
private static readonly TimeSpan hour_1 = 1.Hours();
private EnvironmentValidationExecutor _executor;
public
EnvironmentValidationService(EnvironmentValidationExecutor exe, int
minutesBetweenChecks)
: base(seconds_30, minutesBetweenChecks.Minutes())
{ ... }
public
EnvironmentValidationService(EnvironmentValidationExecutor exe)
: base(seconds_30, hour_1)
{ ... }
}
public class EnvironmentValidationExecutor
{
private IEnvironmentValidationFactory _factory;
public
EnvironmentValidationExecutor(IEnvironmentValidationFactory factory)
{ ... }
}
public interface IEnvironmentValidationFactory
{
IEnumerable<IEnvironmentValidation> GetValidators();
void Release(IEnvironmentValidation validation);
}
I'm not sure why I'm getting the errors. Since I can resolve the
EnvironmentValidationExecutor and the IEnvironmentValidationFactory, I
would assume that the container could resolve them in order to use the
second constructor on the EnvironmentValidationService. Any help would
be appreciated.
Matthew Brubaker
[email protected] <mailto:[email protected]>
(785) 215-7061
--
You received this message because you are subscribed to the Google
Groups "Castle Project Users" group.
To post to this group, send email to
[email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.
--
You received this message because you are subscribed to the Google Groups "Castle
Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.