控制反转(Inversion of Control,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的反转。比如在类型A中需要使用类型B的实例,而B实例的创建并不由A来负责,而是通过外部容器来创建。通过IoC的方式实现针对目标HttpController的激活具有重要的意义。[本文已经同步到《How ASP.NET Web API Works?》]

将IoC应用于HttpController激活系统的目的在于让一个预定义的IoC容器来提供最终的HttpController对象。通过《ASP.NET Web API的Controller是如何被创建的?》的介绍我们知道HttpController的激活最终由HttpControllerActivator对象来完成,所以将IoC与ASP.NET Web API的HttpController激活系统进行集成最为直接的方式莫过于自定义一个HttpControllerActivator。

我们通过一个简单实例来演示如何通过自定义HttpControllerActivator的方式实现与IoC的集成,我们采用的IoC框架是Unity。我们在一个ASP.NET Web API应用中定义了这个UnityHttpControllerActivator类型。UnityHttpControllerActivator具有一个表示Unity容器的属性UnityContainer,该属性在构造函数中被初始化。在用于创建的HttpController的Create方法中,我们调用此UnityContainer对象的Resolve方法创建目标HttpController对象。

class UnityHttpControllerActivator : IHttpControllerActivator
   2: {
private set; }
   4:  
public UnityHttpControllerActivator(IUnityContainer unityContainer)
   6:     {        
this.UnityContainer = unityContainer;
   8:     }
   9:  
public  IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
  11:     {
this.UnityContainer.Resolve(controllerType);
  13:     }
  14: }

相关文章:

  • 2022-12-23
  • 2021-04-04
  • 2021-08-22
  • 2022-01-27
  • 2021-11-24
猜你喜欢
  • 2022-12-23
  • 2021-05-25
  • 2021-05-16
  • 2022-03-07
  • 2022-12-23
  • 2021-11-17
相关资源
相似解决方案