Castle.MicroKernel.Handlers.AbstractHandler.AddDependency C# (CSharp) Method

AddDependency() protected method

Invoked by EnsureDependenciesCanBeSatisfied in order to check if a dependency can be satisfied. If not, the handler is set to a 'waiting dependency' state.
This method registers the dependencies within the correct collection or dictionary and changes the handler state to HandlerState.WaitingDependency
protected AddDependency ( DependencyModel dependency ) : void
dependency Castle.Core.DependencyModel
return void
		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);
			}
		}