【问题标题】:How do I use dependency injection for external dependencies?如何对外部依赖项使用依赖项注入?
【发布时间】:2011-11-22 22:38:56
【问题描述】:

我想我差不多明白了。

假设我希望我的应用发送短信。但我还不确定是否应该使用 Twilio 或 SomeOtherSMSService。事实上,我还真的不在乎。所以我有这么简单的东西,所以我可以继续开发我的应用程序。

public interface ISMSService{
    public bool SendMessage(string to, string message);
}

现在我想试试 Twilio。这就是我感到困惑的地方。我可以将它安装为 Nuget 包,但我认为他们使用 REST API 的 C# 包装器根本不会匹配我的界面。修改它似乎也不是一个好主意。

从自述文件中我可以看到,要使用它,我需要做这样的事情

var msg = twilio.SendSmsMessage("+15551112222", "+15553334444", "Can you believe it's this easy to send an SMS?!");

我最好的猜测是我应该将它包装到我自己的接口实现中。 像这样。

using Twilio;

public TwilioSMSService : ISMSService
{
    TwilioRestClient twilio;
    public TwilioSMSService()
    {
        twilio = new TwilioRestClient("accountSid", "authToken");

    }

    public bool SendMessage(string to, string message)
    {
        var msg = twilio.SendSmsMessage("+15551112222", to, message);
        if (msg != null) return true;
        return false;
        // this would obviously need more logic.
    }

我想确保我保持依赖注入原则,但对我来说,我需要在默认构造函数中实例化 TwilioRestClient 似乎有些可疑,这正是我应该帮助您避免的依赖注入:s。

这种方法正确吗?如果没有,你会怎么做?

请帮忙。

【问题讨论】:

    标签: asp.net asp.net-mvc dependency-injection dependencies


    【解决方案1】:

    twillio 博客上有一篇非常好的文章,我们没有在我们的项目中使用 mvc 控制器,所以我们不能使用它,但分享链接以防它帮助你。

    https://www.twilio.com/blog/2012/11/adding-dependency-injection-to-your-asp-net-mvc-twilio-app-using-mef.html

    文章有点过头了,但看起来很有用。

    【讨论】:

      【解决方案2】:

      这是完全可以接受的。您正在从消费类中抽象出 TwilioRestClient 的依赖关系。这样您就可以在控制器中输入FakeSMSService 进行单元测试。您不需要对 Twilio 进行单元测试。

      【讨论】:

      • 完美。我只是想确保在构造函数中实例化 te TwilioClient 对象没有错……谢谢。
      • 您可以考虑将其放入 try/catch 中。这样如果它抛出异常就不会产生巨大的影响。
      • 杰米,但我怎么能注入呢?我无法控制它。我不能让它实现一个我可以配置为注入的接口。
      • 但是不应该为TwilioSMSService 编写单元测试吗?现在编写这样的单元测试将更加困难,因为TwilioRestClient 类是硬编码的。有没有办法仍然以某种方式连接到启动类的服务以注入TwilioRestClient
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2019-05-08
      • 2021-09-07
      相关资源
      最近更新 更多