context.RequestServices.GetService()解析null

问题描述 投票:1回答:1

我试图让我的用户存储库像这样:

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
}
c# asp.net-core
1个回答
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...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.