StartFlag
using Castle.MicroKernel;
using Castle.MicroKernel.Context;
using System.Collections.Generic;
namespace Castle.Facilities.Startable
{
public class StartFlag : IStartFlagInternal
{
protected readonly List<IHandler> waitList = new List<IHandler>();
protected StartableFacility.StartableEvents events;
public virtual void Signal()
{
events.StartableComponentRegistered -= CacheHandler;
StartAll();
}
protected void CacheHandler(IHandler handler)
{
waitList.Add(handler);
}
protected virtual void Init()
{
events.StartableComponentRegistered += CacheHandler;
}
protected virtual void Start(IHandler handler)
{
handler.Resolve(CreationContext.CreateEmpty());
}
protected void StartAll()
{
IHandler[] array = waitList.ToArray();
waitList.Clear();
IHandler[] array2 = array;
foreach (IHandler handler in array2) {
Start(handler);
}
}
void IStartFlagInternal.Init(StartableFacility.StartableEvents events)
{
this.events = events;
Init();
}
}
}