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;
            }
        }
Beispiel #2
0
        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) !);
        }