You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造函数注入实现依赖注入:谁调用UnityContainer的Resolve方法?

Who Calls UnityContainer.Resolve() in Microsoft.Practices.Unity for API Controllers?

好问题!咱们一步步拆解这个流程:

  • 首先,当你把Unity集成到ASP.NET MVC/Web API项目时,你会在启动代码(比如Global.asax或者Startup.cs)里把Unity注册为框架的依赖解析器(IDependencyResolver),比如Web API里会写:

    var container = new UnityContainer();
    // 注册你的服务依赖
    container.RegisterType<IMyService, MyService>();
    // 将Unity设置为Web API的依赖解析器
    GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    
  • 当浏览器的API请求到达时,ASP.NET框架需要创建对应的控制器实例来处理请求。默认情况下,框架会使用DefaultHttpControllerActivator(Web API)或DefaultControllerActivator(MVC)来完成控制器的实例化。

  • 这个激活器不会直接new控制器,而是会调用当前注册的IDependencyResolver(也就是咱们设置的UnityDependencyResolver)的GetService方法,请求获取控制器的实例。

  • 而UnityDependencyResolver的GetService方法内部,就是直接调用UnityContainer.Resolve()方法,来解析控制器类型,同时自动递归解析控制器构造函数中声明的所有依赖项。

简单来说:是ASP.NET框架的控制器激活器触发了依赖解析器的调用,最终由Unity的依赖解析器内部调用UnityContainer.Resolve()来完成实例化和依赖注入。

如果你自定义了控制器激活器,那自定义的激活器也会负责调用Resolve,但默认流程里是框架激活器+Unity依赖解析器的组合来完成这个操作。

内容的提问来源于stack exchange,提问作者Sanjay Soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:42:31