using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Torch.API.Managers { /// /// Manages a set of and the dependencies between them. /// public interface IDependencyManager : IDependencyProvider { /// /// Registers the given manager into the dependency system. /// /// /// This method only returns false when there is already a manager registered with a type derived from this given manager, /// or when the given manager is derived from an already existing manager. /// /// Manager to register /// When adding a new manager to an initialized dependency manager /// true if added, false if not bool AddManager(IManager manager); /// /// Clears all managers registered with this dependency manager /// /// When removing managers from an initialized dependency manager void ClearManagers(); /// /// Removes a single manager from this dependency manager. /// /// The manager to remove /// true if successful, false if the manager wasn't found /// When removing managers from an initialized dependency manager bool RemoveManager(IManager manager); /// /// Sorts the dependency manager, then attaches all its registered managers in /// void Attach(); /// /// Detaches all registered managers in /// void Detach(); /// /// The order that managers should be attached in. (Dependencies, then dependents) /// /// When trying to determine load order before this dependency manager is initialized IEnumerable AttachOrder { get; } /// /// The order that managers should be detached in. (Dependents, then dependencies) /// /// When trying to determine unload order before this dependency manager is initialized IEnumerable DetachOrder { get; } } }