在现代C#开发中,尤其是使用.NET Core或.NET 5+构建应用程序时,依赖注入(Dependency Injection, DI)已成为标准设计模式。而当我们需要处理通用逻辑(如仓储、缓存、日志等)时,C#泛型依赖注入就显得尤为重要。本教程将手把手教你如何在.NET项目中注册和使用泛型服务,即使是编程小白也能轻松上手。

泛型依赖注入是指将带有泛型参数的服务(如 IRepository<T>)注册到DI容器中,使得在运行时可以自动解析出对应具体类型的实现。这种方式避免了为每个实体类型重复编写注册代码,极大提升了代码复用性和可维护性。
假设你有一个通用的数据访问接口:
public interface IRepository<T>{ T GetById(int id); void Add(T entity); void Delete(T entity);}如果你有 User、Product、Order 等多个实体,难道要分别为它们注册一次服务吗?当然不用!通过.NET Core依赖注入的泛型注册功能,只需一行代码即可搞定所有类型。
在 Program.cs(.NET 6+)或 Startup.cs(旧版)中,你可以使用 AddScoped、AddTransient 或 AddSingleton 的泛型重载方法来注册泛型服务。
“开放泛型”指的是未指定具体类型的泛型,如 IRepository<T>。注册方式如下:
// Program.cs (.NET 6+)var builder = WebApplication.CreateBuilder(args);// 注册泛型服务builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>));var app = builder.Build();app.Run();注意:这里使用的是 typeof(IRepository<>),尖括号中没有具体类型,这就是“开放泛型”的写法。
你需要提供一个实现了该接口的泛型类:
public class Repository<T> : IRepository<T>{ public T GetById(int id) { // 模拟从数据库获取 throw new NotImplementedException(); } public void Add(T entity) { // 模拟添加逻辑 } public void Delete(T entity) { // 模拟删除逻辑 }}现在你可以在任何需要的地方通过构造函数注入泛型服务:
public class UserController : ControllerBase{ private readonly IRepository<User> _userRepository; public UserController(IRepository<User> userRepository) { _userRepository = userRepository; } [HttpGet("{id}")] public IActionResult GetUser(int id) { var user = _userRepository.GetById(id); return Ok(user); }}当请求到达时,DI容器会自动创建 Repository<User> 的实例并注入到控制器中。
IRepository<User> 到 Repository<Product>,类型必须对应。通过本文,你已经掌握了泛型服务注册的核心技巧。使用C#泛型依赖注入,不仅能减少重复代码,还能让架构更加清晰和灵活。无论你是开发Web API、后台服务还是桌面应用,这项技能都至关重要。
记住关键词:C#泛型依赖注入、.NET Core依赖注入、泛型服务注册、C#依赖注入教程。掌握它们,你就能在面试和实战中游刃有余!
希望这篇C#依赖注入教程对你有所帮助!欢迎实践并分享你的经验。
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025129802.html