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

求ASP.NET WebApi中Microsoft Unity 5.6依赖注入配置教程及站点

在ASP.NET WebApi中配置Microsoft Unity 5.6依赖注入的指南

我刚好对Unity 5.x在ASP.NET WebApi中的配置流程很熟悉,给你一步步拆解清楚,照着做就能搞定:

1. 安装对应版本的NuGet包

首先得把Unity 5.6和适配WebApi的包装上,打开NuGet包管理器控制台,运行以下命令:

Install-Package Unity -Version 5.6.10
Install-Package Unity.WebApi -Version 5.6.10

注意两个包的版本要保持一致,避免兼容性问题。

2. 创建Unity配置类

在你的WebApi项目的App_Start文件夹下新建一个UnityConfig.cs文件,用来统一管理依赖注册:

using System.Web.Http;
using Unity;
using Unity.WebApi;

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        // 初始化Unity容器
        var container = new UnityContainer();

        // 在这里注册你的服务和实现类
        // 示例:注册IMyService接口到MyService实现,使用分层生命周期管理器
        // container.RegisterType<IMyService, MyService>(HierarchicalLifetimeManager.Instance);

        // 将Unity设置为WebApi的全局依赖解析器
        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    }
}

这里的HierarchicalLifetimeManager是WebApi场景下最常用的生命周期模式——每个HTTP请求会创建一个新的实例,请求结束后自动释放资源。

3. 在应用启动时初始化Unity

打开Global.asax.cs,找到Application_Start方法,在里面添加Unity的初始化调用:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    // 启动Unity依赖注入
    UnityConfig.RegisterComponents();
}

确保这行代码放在WebApi路由配置之后,避免解析器初始化不及时。

4. 在控制器中使用依赖注入

接下来就可以在控制器里通过构造函数注入依赖了,比如:

public class ProductsController : ApiController
{
    private readonly IProductService _productService;

    // 构造函数注入,Unity会自动解析对应的实现类
    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet]
    public IHttpActionResult GetAllProducts()
    {
        var products = _productService.GetAll();
        return Ok(products);
    }
}

关键注意事项

  • 如果你有多个构造函数,Unity会自动选择参数最多的那个,所以建议每个控制器只保留一个带依赖的构造函数,避免歧义。
  • 不同的生命周期管理器要按需选择:ContainerControlledLifetimeManager是单例模式,适合全局共享的服务;TransientLifetimeManager每次请求都会创建新实例,适合无状态的轻量级服务。
  • WebApi的内置服务(比如HttpRequestMessage)不需要手动注册,Unity会自动处理这些类型的解析。

内容的提问来源于stack exchange,提问作者Micah Armantrout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:42