No service for type has been registered

Рейтинг: 1Ответов: 1Опубликовано: 19.07.2023

Я полный новичок в ASP.NET и только разбираюсь с внедрением зависимостей, поэтому, скорее всего, моя ошибка очевидна, но все же я не понимаю, что именно не так. В моем проекте есть класс StartCommand, в котором используется некая реализация интерфейса IUserService. При попытке получить UserService, я получаю ошибку отсутствия регистрации сервиса, хотя, вроде как, я его зарегистрировал.

Program.cs:

builder.Services.AddDbContext<DataContext>(opt => opt.UseSqlite(connectionString), ServiceLifetime.Singleton);

builder.Services.AddTransient<IUserService, UserService>();
builder.Services.AddTransient<ICommand, StartCommand>();

StartCommand:

private readonly IUserService userService;

public StartCommand(IServiceProvider serviceProvider)
{
    userService = serviceProvider.GetRequiredService<UserService>(); <- Ошибка возникает тут
}
...

IUserService:

Task<AppUser?> GetUserAsync(Update update);
Task<bool> DeliteUserAsync(Update update);
Task<RegistratingStatus> RegistratingUserAsync(Update update);

UserService:

private readonly DataContext database;

public UserService(DataContext data)
{
    database = data;
}
...

Ответы

▲ 0Принят

Пользователь EvgeniyZ предложил рабочее решение в комментариях, вопрос закрыт.


Вы просите UserService, когда добавляете .AddTransient<IUserService, UserService>();, то есть IUserService. Другими словами, вы должны просить именно интерфейс, либо регистрировать тип класса без интерфейса. Ну и да, делать public StartCommand(IServiceProvider serviceProvider) не нужно, просите сразу нужный тип (public StartCommand(IUserService userService)).