我正在手动注册项目的 Web API 控制器的子集:
container.Register(typeof(ILGTWebApiController), controllerType, Lifestyle.Transient);
工作正常。但是,当我运行时:
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
看来有影响all项目中的 Web API 控制器。我想让其他的不被简单的注入器影响。
如果我不运行上面的代码,简单的注入器会抱怨我的控制器没有空的构造函数(他们显然不会,因为我使用的是 DI)。
而不是更换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()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)