我试图这样获取用户存储库:
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
}
答案 0 :(得分:0)
您仅在注册注册,而应在接口的实现中进行注册。例如:
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...
}
}