#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-контейнер. Вы указываете, какие службы реализуют каждый интерфейс. Без этого невозможно узнать, какую службу разрешить на основе интерфейса.