使用简单的注入器注册Web API控制器的子集

我手动注册我项目的Web API控制器的一个子集:

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

工作良好。 但是,当我跑:

 GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); 

它似乎影响项目中的所有 Web API控制器。 我想通过简单的喷射器保持其他的不受影响。

如果我不运行上面的代码,简单的注入器会抱怨我的控制器没有空的构造函数(他们显然不会,因为我正在使用DI)。

而不是替换IDependencyResolver ,创建一个自定义IHttpControllerActivator来解析控制器或回IHttpControllerActivator原始激活器,否则:

 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); } } 

您可以按如下方式配置自定义MyControllerActivator

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