求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
相关产品推荐
相关产品推荐

