最近我遇到了这个讨论。ASP.NET WebAPI中的依赖注入:IHttpControllerActivator与IDependencyResolver
在ASP.NET的WebAPI,当我们需要整合控制/依赖注入容器的自定义反转,我们需要去用两种不同的策略:
实施
IHttpControllerActivator
,这是一个扩展点完全控制控制器的生命周期。也就是说,我们可以定义一个控制器是如何实例化的。此时,我们可以通过解决控制器使用控制容器的反转,并让它使用自己的依赖注入方法。实现
IDependencyResolver
,我们可以在其中定义如何解决依赖注入。
在我目前的项目,我去了IHttpControllerActivator
路,因为我使用温莎城堡作为控制容器的反转,我完全可以从它的容器配置控制对象的生命周期,我可以决定如何控制器被解决,并且其递归注入的依赖性的范围定义了它们在控制器结束其生命(即,当请求结束时)时死亡。尽管其中一些功能可以通过IDependencyResolver
实现来实现,但我认为IHttpControllerActivator
是集成ASP.NET Web API中的控件和依赖注入反转的最佳方式,因为我相信我更喜欢保持抽象在控制和依赖注入的反演方面可能并坚持Castle Windsor配置模型。
与IHttpControllerActivator
方法的主要缺点是,你需要注册容器中的所有控制器同时IDependencyResolver
仍然给出解决控制器的ASP.NET Web API管线(我的责任,这并没有受到大的问题,我只是使用Castle Windsor的Classes.FromAssembly
来配置所有控制器派生ApiController
)。
我是否忽略了任何其他缺点,使IDependencyResolver
方法更合适?
需要从Castle解析所有控制器是您陈述的唯一缺点。答案中应该讨论哪些其他缺点? – Steven
@Steven我可能会忽略的那些人。只是要知道这条路线是否比'IDependencyResolver'路线更糟糕,或者它只是一个主观决定。 –
我认为通过IHttpControllerActivator是正确的选择。这适用于MVC,Web API和新的ASP.NET Core框架。 – Steven