如何在ASP.NET 4.6.1项目中集成Microsoft.Extensions.DependencyInjection实现依赖注入
.NET Framework 4.6.1 实现依赖注入配置方法
前置准备
首先通过NuGet包管理器安装 Microsoft.Extensions.DependencyInjection 包,你可以直接用包管理控制台执行命令:Install-Package Microsoft.Extensions.DependencyInjection
适配不同项目类型时,依赖解析器的继承接口会有区别,下文会分别标注。
Application_Start 完整代码实现
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { // 原有框架自带的配置代码请保留,比如WebApiConfig、RouteConfig注册等 AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); // 1. 初始化服务集合 IServiceCollection services = new ServiceCollection(); // 2. 注册服务,和.NET Core中的写法完全一致 RegisterServices(services); // 3. 构建服务提供器 var serviceProvider = services.BuildServiceProvider(); // 4. 替换ASP.NET Web API的依赖解析器(如果是MVC项目,注释这行,用下方MVC专用代码) GlobalConfiguration.Configuration.DependencyResolver = new DefaultDependencyResolver(serviceProvider); // *如果是MVC项目,替换上面的解析器配置为下面这行* // DependencyResolver.SetResolver(new DefaultDependencyResolver(serviceProvider)); } private void RegisterServices(IServiceCollection services) { // 你的服务注册逻辑,和.NET Core写法完全一致 services.AddTransient<IMemberServices, MemberService>(); // 其他服务注册也可以写在这里 } }
自定义依赖解析器实现
你需要额外新增一个DefaultDependencyResolver类,用来适配.NET Framework的依赖解析接口:
using System; using System.Collections.Generic; using System.Web.Http.Dependencies; using Microsoft.Extensions.DependencyInjection; public class DefaultDependencyResolver : IDependencyResolver { protected IServiceProvider _serviceProvider; public DefaultDependencyResolver(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IDependencyScope BeginScope() { return new DefaultDependencyResolver(_serviceProvider.CreateScope().ServiceProvider); } public void Dispose() { // 按需释放资源 } public object GetService(Type serviceType) { return _serviceProvider.GetService(serviceType); } public IEnumerable<object> GetServices(Type serviceType) { return _serviceProvider.GetServices(serviceType); } }
如果是MVC项目,只需要把上面代码里继承的IDependencyResolver改成System.Web.Mvc.IDependencyResolver即可。
配置完成后就可以直接在控制器、服务的构造函数中注入IMemberServices使用,用法和.NET Core完全一致。
内容的提问来源于stack exchange,提问作者Zorev Gnoz
相关产品推荐
相关产品推荐

