我想我差不多明白了。
假设我想让我的应用程序发送短信。但我还不确定是否应该选择Twilio或其他一些短信服务。实际上,我现在并不在意。因此,我有一个简单的东西,这样我就可以继续开发我的应用程序。
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,这似乎与依赖注入的初衷相悖。
这种方法是否正确?如果不是,你会怎么做?
请帮忙。
TwilioSMSService
,难道不应该编写一个单元测试吗?而现在编写这样的单元测试将更加困难,因为类TwilioRestClient
已经硬编码了。是否有一种方法可以仍然钩入启动类的服务以注入TwilioRestClient
呢? - Yos