using System.Threading.Tasks; namespace SharedLibraryCore.Interfaces { /// <summary> /// used to handle middleware actions registered from arbitrary assemblies /// </summary> public interface IMiddlewareActionHandler { /// <summary> /// registers an action with the middleware handler /// </summary> /// <typeparam name="T">action return type</typeparam> /// <param name="actionType">class type of action</param> /// <param name="action">action to perform</param> /// <param name="name">optional name to reference the action by</param> void Register<T>(T actionType, IMiddlewareAction<T> action, string name = null); /// <summary> /// executes the given action type or name /// </summary> /// <typeparam name="T">action return type</typeparam> /// <param name="value">instance member to perform the action on</param> /// <param name="name">optional name to reference the action by</param> /// <returns></returns> Task<T> Execute<T>(T value, string name = null); } }