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

如何在.NET Framework 4.8类库中使用Microsoft Dependency Injection依赖注入

问题解决方法

核心问题原因

  • 你直接用new B()手动实例化对象,DI容器不会主动介入构造过程,自然无法自动注入依赖
  • 你当前的Register方法里每次创建新的ServiceCollection,注册完成后没有构建为IServiceProvider并持久化存储,所有注册逻辑执行完就被回收,相当于没有注册任何服务

正确实现步骤

1. 改造依赖容器,持久化存储服务提供者实例

using Microsoft.Extensions.DependencyInjection;

public static class DependencyContainer
{
    // 全局存储构建完成的服务提供者
    public static IServiceProvider ServiceProvider { get; private set; }

    public static void Register()
    {
        var services = new ServiceCollection();
        // 注册接口与对应实现
        services.AddTransient<InterfaceA, A>();
        // 需要解析的类B也要注册到容器,DI才能识别其构造依赖
        services.AddTransient<B>();
        
        // 构建服务提供者并持久化
        ServiceProvider = services.BuildServiceProvider();
    }
}

2. 修正B类的构造函数声明,显式声明依赖

public class B
{
    // 公共构造函数,参数为需要注入的依赖项
    public B(InterfaceA interfaceA)
    {
        // 此处可将注入的interfaceA赋值给类内私有字段使用
    }
}

3. 从容器解析B的实例,不要手动new

注意:调用GetService方法需要引入Microsoft.Extensions.DependencyInjection命名空间

public class MainClass
{
    public void DoStuff()
    {
        DependencyContainer.Register();
        // 从服务提供者获取B的实例,DI会自动注入已注册的InterfaceA实现
        var myB = DependencyContainer.ServiceProvider.GetService<B>();
    }
}

类库场景注意事项

如果你的类库是提供给外部应用调用的,建议将服务注册的入口暴露给调用方,不要在类库内部硬编码注册逻辑,方便调用方根据自身需求替换接口实现,避免强耦合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:45:11