我想我几乎得到了这个。
说我希望我的应用程序发送短信。但我还不确定我是否应该使用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。
这种做法是否正确?如果不是,你会怎么做?
请帮助。
答案 0 :(得分:7)
这完全可以接受。您正在将TwilioRestClient
的依赖关系从消费类中抽象出来。这样你就可以在你的控制器中投入FakeSMSService
进行单元测试。你不应该对Twilio进行单元测试。
答案 1 :(得分:0)
在twillio博客上有一篇非常好的文章,我们没有为我们的项目使用mvc控制器,所以我们不能使用它,但是如果它可以帮助你的话,可以共享链接。
文章有点过头,但看起来很有用。