我手动注册了项目的Web API控制器的一部分:
container.Register(typeof(ILGTWebApiController), controllerType, Lifestyle.Transient);
工作正常。但是,当我跑:
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
它似乎影响了项目中的所有 Web API控制器。我想通过简单的喷射器保持其他的不受影响。
如果我不运行上面的代码,简单的注入器会抱怨我的控制器没有空的构造函数(他们显然不会,因为我使用的是DI)。
答案 0 :(得分:1)
不是替换IDependencyResolver
,而是创建一个自定义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()));