【问题标题】:How can I use DI for 3'rd party static class in Dot Net Core?如何在 Dot Net Core 中将 DI 用于第 3 方静态类?
【发布时间】:2019-10-10 01:58:52
【问题描述】:

我们公司的某个人(很久以前写错了)这个静态类,由 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>();

问题:

还有办法让MailService(或它的任何包装器)可注入吗?

【问题讨论】:

  • 我认为这在某种程度上是相关的:stackoverflow.com/questions/6523463/… ?
  • 你不能把它包装在一个自定义的类/接口中(比如MailSender/IMailSender)吗?在MailSender 中调用MailService 并在需要时注入IMailSender MailService

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


【解决方案1】:

就这么简单:

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>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多