Добавление внедрения зависимостей приводит к исключению в .NET Core

#c# #.net-core #dependency-injection

#c# #.net-core #внедрение зависимостей

Вопрос:

Я получаю следующее исключение. Почему это так и как я могу это решить?

SMSService.cs Когда я комментирую конструктор, он начинает работать, но мне потребуется доступ ISMSSender к нему.

Система.Исключение AggregateException: «Некоторые службы не могут быть созданы (ошибка при проверке дескриптора службы «ServiceType: Authentication.API.Repository.Интерфейс.Срок службы ISMSService: Одноэлементный тип реализации: Authentication.API.Repository.SMSService’: не удалось разрешить службу для типа ‘SMSSender.API.Repository.Интерфейс.ISMSSender’ при попытке активировать ‘Authentication.API.Repository.SMSService’.)’

Authentication.API.Repository.SMSService

 public class SMSService : ISMSService
{
    private readonly ISMSSender _smsSender;

    public SMSService(ISMSSender smsSender)
    {
        _smsSender = smsSender;
    }
}
  

Запуск

          services.AddTransient<ISMSService, SMSService>();

         ...
  

SMSSender.API.Repository.Интерфейс.ISMSSender

 public interface ISMSSender
{
    Task<SMSUser> SendSMS(SMSUser prospectiveUser);
}
  

SMSSender.API.Repository.Интерфейс.SMSSender

 public class SMSSender : ISMSSender
{
    public async Task<SMSUser> SendSMS(SMSUser sMSUser)
    { }

}
  

Ответ №1:

Похоже, вы не зарегистрировали SMSSender (вы выполнили услугу):

 services.AddTransient<ISMSService, SMSService>();
services.AddTransient<ISMSSender, SMSSender>();
  

Комментарии:

1. Должен ли я это делать? Это происходит из другого проекта?

2. Да, абсолютно

3. На этом этапе вы создаете свой DI-контейнер. Вы указываете, какие службы реализуют каждый интерфейс. Без этого невозможно узнать, какую службу разрешить на основе интерфейса.