如何在Dot Net Core中为第三方静态类使用DI?

Roy*_*mir 0 c# .net-core asp.net-core

我们公司中的某个人(很久以前就错误地)写了这个静态类,由Nuget提供:(我无法编辑)

public static class MailService
 {

    public static void SendEmail(string recipients, string subject, string msg  )
    {
        SendEmail(recipients, subject,  msg);
    }
...
}
Run Code Online (Sandbox Code Playgroud)

我已经知道这很糟糕。但是,让我们继续。
我想在asp.net核心项目中通过DI使用此类。
问题是我不能使用它(因为static不能被更新):

  services.AddSingleton<MailService>();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

题:

还有办法使MailService(或任何包装)注射剂吗?

stu*_*rtd 6

就这么简单:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在启动类中:

services.AddSingleton<IMailService, MailServiceWrapper>();
Run Code Online (Sandbox Code Playgroud)