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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:42:02