开放泛型模式
开放泛型模式(Open Generic)是一种允许用户在 DI 容器中注册和解析泛型类型的模式。这种模式常用于需要动态创建和管理泛型类型的场景,例如使用仓储模式访问多个数据源的场景。通过注册泛型类型,用户可以根据需要动态创建对象,并将其注入到依赖项中。示例代码如下:
// 注册泛型仓储
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
// 使用泛型仓储
public class MyService<T>
{
private readonly IRepository<T> _repository;
public MyService(IRepository<T> repository)
{
_repository = repository;
}
}
泛型限定模式
泛型限定(Generic Constraints)模式是指在使用泛型类型作为依赖项时,限定泛型类型必须满足某些条件。例如,假设我们有一个泛型类型的服务,它依赖于一个支持增删改查操作的仓储。我们可以通过泛型限定模式,将泛型参数限定为必须实现 IRepository
// IRepository 接口定义
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
T GetById(int id);
}
// MyService 依赖于 IRepository 接口
public class MyService<T> where T : class, IRepository<T>
{
private readonly T _repository;
public MyService(T repository)
{
_repository = repository;
}
public void DoSomething()
{
// ...
}
}
// 注册 MyService
services.AddScoped(typeof(MyService<>));
// 注册 IRepository 的实现
services.AddScoped(typeof(IRepository<>), typeof(MyRepository<>));
在上述示例中,MyService