using System; using System.Collections.Generic; namespace Svelto.Context { class ContextNotifier: IContextNotifer { public ContextNotifier() { _toInitialize = new List>(); _toDeinitialize = new List> (); } /// /// A Context is meant to be initialized only once in its timelife /// public void NotifyFrameworkInitialized() { foreach (WeakReference obj in _toInitialize) { if (obj.IsAlive == true) obj.Target.OnFrameworkInitialized(); } _toInitialize = null; } /// /// A Context is meant to be deinitialized only once in its timelife /// public void NotifyFrameworkDeinitialized() { foreach (WeakReference obj in _toDeinitialize) { if (obj.IsAlive == true) obj.Target.OnFrameworkDestroyed(); } _toDeinitialize = null; } public void AddFrameworkInitializationListener(IWaitForFrameworkInitialization obj) { if (_toInitialize != null) _toInitialize.Add(new WeakReference(obj)); else throw new Exception("An object is expected to be initialized after the framework has been initialized. Type: " + obj.GetType()); } public void AddFrameworkDestructionListener(IWaitForFrameworkDestruction obj) { if (_toDeinitialize != null) _toDeinitialize.Add(new WeakReference(obj)); else throw new Exception("An object is expected to be initialized after the framework has been deinitialized. Type: " + obj.GetType()); } List> _toInitialize; List> _toDeinitialize; } }