protected void AddDependency(DependencyModel dependency)
{
if (Kernel.Resolver.CanResolve(null, this, model, dependency))
{
if (dependency.DependencyType == DependencyType.Service && dependency.TargetType != null)
{
IHandler depHandler = Kernel.GetHandler(dependency.TargetType);
if (depHandler != null)
{
AddGraphDependency(depHandler.ComponentModel);
}
}
else
{
IHandler depHandler = Kernel.GetHandler(dependency.DependencyKey);
if (depHandler != null)
{
AddGraphDependency(depHandler.ComponentModel);
}
}
return;
}
if (dependency.DependencyType == DependencyType.Service && dependency.TargetType != null)
{
if (DependenciesByService.Contains(dependency.TargetType))
{
return;
}
DependenciesByService.Add(dependency.TargetType, dependency);
}
else
{
DependenciesByKey.Add(dependency.DependencyKey, dependency);
}
if (state != HandlerState.WaitingDependency)
{
// This handler is considered invalid
// until dependencies are satisfied
SetNewState(HandlerState.WaitingDependency);
// Register itself on the kernel
// to be notified if the dependency is satified
Kernel.HandlerRegistered += new HandlerDelegate(DependencySatisfied);
// We also gonna pay attention for state
// changed within this very handler. The
// state can be changed by AddCustomDependencyValue and RemoveCustomDependencyValue
OnHandlerStateChanged += new HandlerStateDelegate(HandlerStateChanged);
}
}