public ControllerActivatorProvider(IControllerActivator controllerActivator) { if (controllerActivator == null) { throw new ArgumentNullException(nameof(controllerActivator)); } // Compat: Delegate to controllerActivator if it's not the default implementation. if (controllerActivator.GetType() != typeof(DefaultControllerActivator)) { _controllerActivatorCreate = controllerActivator.Create; _controllerActivatorRelease = controllerActivator.Release; } }
public TController Create <TController>(IServiceProvider serviceProvider) where TController : ControllerBase { IControllerActivator controllerActivator = serviceProvider .GetRequiredService <IControllerActivator>(); object typeActivatorCache = controllerActivator.GetType() .GetField(TypeActivatorCacheFieldName, BindingFlags.Instance | BindingFlags.NonPublic) ! .GetValue(controllerActivator) !; return((typeActivatorCache.GetType().GetMethod(CreateInstanceMethodName) ! .MakeGenericMethod(typeof(TController)).Invoke(typeActivatorCache, new object[] { serviceProvider, typeof(TController) }) as TController) !); }