public interface IActionInvoker
{
Task InvokeAsync();
}
public interface INestedProviderManager<T>
{
void Invoke(T context);
}
---------------
public class ActionInvokerProviderContext
{
public ActionInvokerProviderContext([NotNull]ActionContext actionContext)
{
ActionContext = actionContext;
}
public ActionContext ActionContext { get; private set; }
public IActionInvoker Result { get; set; }
}
public class NestedProviderManager<T> : INestedProviderManager<T>
{
public NestedProviderManager(IEnumerable<INestedProvider<T>> providers);
public void Invoke(T context);
}
yield return describe.Transient<INestedProvider<ActionInvokerProviderContext>,
ControllerActionInvokerProvider>();
public class ActionInvokerFactory : IActionInvokerFactory
{
private readonly INestedProviderManager<ActionInvokerProviderContext> _actionInvokerProvider;
public ActionInvokerFactory(INestedProviderManager<ActionInvokerProviderContext> actionInvokerProvider)
{
_actionInvokerProvider = actionInvokerProvider;
}
public IActionInvoker CreateInvoker(ActionContext actionContext)
{
var context = new ActionInvokerProviderContext(actionContext);
_actionInvokerProvider.Invoke(context);
return context.Result;
}
}
浙公网安备 33010602011771号