C# 在simple injector中手动注册web api控制器
我使用的是Umbraco,它有很多自定义的webapi控制器。我想在SimpleInjector中忽略它们,只是手动注册我自己的WebAPI控制器C# 在simple injector中手动注册web api控制器,c#,simple-injector,C#,Simple Injector,我使用的是Umbraco,它有很多自定义的webapi控制器。我想在SimpleInjector中忽略它们,只是手动注册我自己的WebAPI控制器 我应该将控制器的生活方式注册为瞬态还是范围?Web api控制器实现了IDisposable,但如果我理解正确,简单注入器在使用container.RegisterMvcControllers()时会将它们注册为瞬态。当使用web api时,它们是否也应该是暂时的?如果是这样的话,我想我必须抑制一次性警告 注册情况如何?如果我简单地执行一个容器.Re
IDisposable
,但如果我理解正确,简单注入器在使用container.RegisterMvcControllers()
时会将它们注册为瞬态。当使用web api时,它们是否也应该是暂时的?如果是这样的话,我想我必须抑制一次性警告容器.Register(livelity.Transient)
并且我的控制器注入另一个注册接口,即公共MyController(IMyRegisteredInterface foo)
,它将抛出异常确保控制器具有无参数公共构造函数
RegisterWebApp控制器
方法,如下所示:
container.RegisterWebApiControllers(httpConfiguration,
typeof(MyApiController).Assembly);
我应该将控制器的生活方式注册为瞬态还是范围
您可以同时执行这两项操作,但将它们注册为瞬态通常是最简单的,因为这样可以防止其所有依赖项也被限定范围。这样做的缺点是,由于ApiController
实现了IDisposable
,这意味着您必须抑制可处置瞬态组件
诊断警告。这实际上是Web API中的一个设计缺陷,因为基类和接口通常不应实现IDisposable
。此警告可以被抑制,因为Web API将确保处理
最简单的方法是使用registerWebapicController
方法提供的批注册功能,因为它会自动为您抑制此警告
确保控制器具有无参数公共构造函数
确保遵循,尤其是使用
SimpleInjectorWebApidencyResolver
;这将确保通过简单的喷油器解决控制器问题。aah,谢谢!我缺少SimpleInjectorWebApidencyResolver
:)。我想对MVC使用SimpleInjectorDependencyResolver
是有效的,对web api并行使用SimpleInjectorWebApidencyResolver
也是有效的?@filur:你真的没有选择。两个框架都需要自己的钩子来解析自己的控制器实例集。