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); /// /// Initializes the dependency manager, and all its registered managers. /// void Init(); /// /// Disposes the dependency manager, and all its registered managers. /// void Dispose(); /// /// The order that managers should be loaded in. (Dependencies, then dependents) /// /// When trying to determine load order before this dependency manager is initialized IEnumerable LoadOrder { get; } /// /// The order that managers should be unloaded in. (Dependents, then dependencies) /// /// When trying to determine unload order before this dependency manager is initialized IEnumerable UnloadOrder { get; } } }