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

时间:2019-05-23 13:17:21

标签: c# asp.net-core .net-core

我们公司的某人(很久以前就误认为是 )由Nuget提供了这个静态类:(我无法编辑)

public static class MailService
 {

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

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

  services.AddSingleton<MailService>();

enter image description here

问题:

还有没有办法使MailService(或其包装)可注射?

2 个答案:

答案 0 :(得分: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);
    }
}

在Startup类中:

services.AddSingleton<IMailService, MailServiceWrapper>();

答案 1 :(得分:-1)

您可以使用@stuartd指出的接口实现,但它不一定是包装器。只是实现IMailService的MailService具体类