context.RequestServices.GetService () с разрешением null - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь получить свой репозиторий пользователей следующим образом:

var userRepository = context.RequestServices.GetService<Repository<User>>();

Но моя проблема в том, что он разрешается нулем, я определил его так:

services.AddScoped(typeof(UserRepository), typeof(UserRepository));

И вот как выглядит класс / интерфейс репозитория:

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 голосов
/ 05 сентября 2018

Вы регистрируете регистрацию только тогда, когда вам необходимо зарегистрировать интерфейс с его реализацией. Например:

services.AddScoped<IRepository<User>, UserRepository>();

После этого вы можете разрешить службу IRepository<User> следующим образом:

var userRepository = context.RequestServices.GetService<IRepository<User>>();

С другой стороны: разрешение таких сервисов считается антишаблоном поиска сервисов . Лучшая альтернатива - внедрить сервисы в ваш конструктор потребляющих сервисов. Например:

public class MyService
{
    public MyService(IRepository<User> userRepository)
    {
        // Use userRepository...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...