Register subset of Web API controllers with simple injector

前端 未结 1 1664
故里飘歌
故里飘歌 2021-01-22 13:18

I\'m manually registrering a subset of my project\'s Web API controllers:

container.Register(typeof(ILGTWebApiController), controllerType, Lifestyle.Transient);          


        
1条回答
  •  野性不改
    2021-01-22 13:55

    Instead of replacing the IDependencyResolver, create a custom IHttpControllerActivator that resolves the controller or fallbacks to the original activator otherwise:

    public sealed class MyControllerActivator : IHttpControllerActivator
    {
        private readonly Container container;
        private readonly IHttpControllerActivator original;
    
        public MyControllerActivator(Container container, IHttpControllerActivator original)
        {
            this.container = container;
            this.original = original;
        }
    
        public IHttpController Create(
            HttpRequestMessage req, HttpControllerDescriptor desc, Type type)
        {
            if (type == typeof(ILGTWebApiController))
                return (IHttpController)this.container.GetInstance(type);
    
            return this.original.Create(req, desc, type);
        }
    }
    

    You can configure your custom MyControllerActivator as follows:

    GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
        new MyControllerActivator(
            container,
            GlobalConfiguration.Configuration.Services.GetHttpControllerActivator()));
    

    0 讨论(0)
提交回复
热议问题