如何在发布为NuGet包的.NET Core类库中内置依赖注入注册逻辑
问题解答
完全可以,这是.NET类库封装依赖注入的标准实现方案,具体操作步骤如下:
- 第一步:你的
Repository类库需要先安装NuGet依赖包Microsoft.Extensions.DependencyInjection.Abstractions,这个包只包含DI的抽象接口,不会引入多余的运行时依赖。 - 第二步:在类库中新建静态扩展类,编写
IServiceCollection的扩展方法用来封装所有内部服务的注册逻辑,示例代码如下:
using Microsoft.Extensions.DependencyInjection; namespace Repository { public static class RepositoryServiceCollectionExtensions { public static IServiceCollection AddRepository(this IServiceCollection services) { // 注册内部接口与实现的映射关系 services.AddScoped<IRepository, Repository>(); // 如果有其他需要批量注册的内部服务,都可以放在这里统一处理 return services; } } }
完成上述开发后重新发布你的Repository NuGet包,后续其他项目引用这个包后,只需要在入口文件的服务注册逻辑中调用一次扩展方法即可完成所有注册,无需手动逐个绑定接口和实现,使用示例:
// 以.NET 6+的顶层语句Program.cs为例 var builder = WebApplication.CreateBuilder(args); // 仅需这一行即可完成Repository包内所有服务的注册 builder.Services.AddRepository(); // 其他服务注册逻辑... var app = builder.Build();
如果需要支持用户自定义服务生命周期,可以给扩展方法增加可选参数,优化后示例:
public static IServiceCollection AddRepository(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Scoped) { services.Add(new ServiceDescriptor(typeof(IRepository), typeof(Repository), lifetime)); return services; }
用户可以根据自身需求指定生命周期,比如builder.Services.AddRepository(ServiceLifetime.Singleton);
内容的提问来源于stack exchange,提问作者sebastian.roibu
相关产品推荐
相关产品推荐

