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

如何在NuGet包中添加带动态生命周期的依赖注入服务?

如何更简洁地实现带ServiceLifetime参数的DI服务注册扩展方法?

我想在NuGet包中添加一个接收ServiceLifetime lifetime参数的扩展方法,通过该参数将服务注册到DI容器中。目前我已经实现了以下代码:

public static void AddProvider(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
    var descriptor = new ServiceDescriptor(
        typeof(IEnvironmentVariableProvider),
        typeof(EnvironmentVariableProvider),
        lifetime);
    services.Add(descriptor);
}

请问有没有更简洁的实现方式?


当然有更简洁的写法,推荐两种常规实现方式:

方式一:使用Switch分支(可读性最优)

直接根据传入的lifetime参数,调用.NET DI框架提供的对应扩展方法,代码直观且符合常规写法:

public static void AddProvider(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
    switch (lifetime)
    {
        case ServiceLifetime.Singleton:
            services.AddSingleton<IEnvironmentVariableProvider, EnvironmentVariableProvider>();
            break;
        case ServiceLifetime.Scoped:
            services.AddScoped<IEnvironmentVariableProvider, EnvironmentVariableProvider>();
            break;
        case ServiceLifetime.Transient:
            services.AddTransient<IEnvironmentVariableProvider, EnvironmentVariableProvider>();
            break;
    }
}

方式二:使用字典映射(代码更紧凑)

如果偏好更紧凑的写法,可以提前注册生命周期与注册方法的映射关系,直接根据参数调用对应逻辑:

public static void AddProvider(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
    var registry = new Dictionary<ServiceLifetime, Action<IServiceCollection>>
    {
        [ServiceLifetime.Singleton] = s => s.AddSingleton<IEnvironmentVariableProvider, EnvironmentVariableProvider>(),
        [ServiceLifetime.Scoped] = s => s.AddScoped<IEnvironmentVariableProvider, EnvironmentVariableProvider>(),
        [ServiceLifetime.Transient] = s => s.AddTransient<IEnvironmentVariableProvider, EnvironmentVariableProvider>()
    };

    registry[lifetime](services);
}

对比你的原始实现,第一种switch写法的可读性更强,也是.NET生态中DI扩展方法的常见写法;第二种字典映射则更适合需要批量扩展或复用映射关系的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:15:42