Как я могу использовать DI для стороннего статического класса в Dot Net Core? - PullRequest
0 голосов
/ 23 мая 2019

Кто-то в нашей компании написал ( по ошибке, давным-давно ) этот статический класс, обслуживаемый Nuget: (я не могу его редактировать)

public static class MailService
 {

    public static void SendEmail(string recipients, string subject, string msg  )
    {
        SendEmail(recipients, subject,  msg);
    }
...
}

Я уже знаю, что это плохо. Но давайте продолжим.
Я хочу использовать этот класс через DI в моем основном проекте asp.net.
Проблема в том, что я не могу использовать это (потому что static не может быть new'ed):

  services.AddSingleton<MailService>();

enter image description here

Вопрос:

Есть ли еще способ сделать MailService (или какую-нибудь обертку для него) инъекционным?

Ответы [ 2 ]

6 голосов
/ 23 мая 2019

Это так просто:

public interface IMailService {
    void SendEmail(string recipients, string subject, string msg);
}

public class MailServiceWrapper : IMailService {
    public void SendEmail(string recipients, string subject, string msg) {
        MailService.SendEmail(recipients, subject, msg);
    }
}

И в классе запуска:

services.AddSingleton<IMailService, MailServiceWrapper>();
0 голосов
/ 24 мая 2019

Вы можете использовать реализацию интерфейса, как указано @stuartd, но она не обязательно должна быть оболочкой. Это просто конкретный класс MailService, реализующий IMailService

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...