context.RequestServices.GetService()解析为null

时间:2018-09-04 23:38:06

标签: c# asp.net-core

我试图这样获取用户存储库:

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
}

1 个答案:

答案 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...
    }
}