我试图让我的用户存储库像这样:
var userRepository = context.RequestServices.GetService<Repository<User>>();
但我的问题是它解析为null,我将其定义如下:
services.AddScoped(typeof(UserRepository), typeof(UserRepository));
这就是Repository类/接口的样子:
public interface IRepository<T> where T : class, IAppEntity
{
//Code
}
public abstract class Repository<T> : IRepository<T> where T : class, IAppEntity
{
//Code
}
这是UserRepository:
public class UserRepository : Repository<User>
{
public UserRepository(ApplicationDbContext context) : base(context)
{
}
}
最后用户模型:
public class User : IdentityUser, IAppEntity
{
//Code
}
您只注册注册,而您应该在其实现中注册接口。例如:
services.AddScoped<IRepository<User>, UserRepository>();
之后,您可以像这样解决IRepository<User>
服务:
var userRepository = context.RequestServices.GetService<IRepository<User>>();
在旁注:解决这样的服务被认为是service locator anti-pattern。更好的选择是将服务注入到消费服务的构造函数中。例如:
public class MyService
{
public MyService(IRepository<User> userRepository)
{
// Use userRepository...
}
}