Как использовать внедрение зависимостей для внешних зависимостей? - PullRequest
4 голосов
/ 22 сентября 2011

Я думаю, что почти получил это.

Скажем, я хочу, чтобы мое приложение отправляло SMS.Но я еще не уверен, должен ли я пойти с Twilio или SomeOtherSMSService.На самом деле, мне все равно.Итак, у меня есть что-то простое, чтобы я мог продолжать разработку своего приложения.

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

Теперь я хочу попробовать Twilio.Это где я запутался.Я могу установить его как пакет Nuget, но я не думаю, что их оболочка C #, которая использует их REST API, вообще будет соответствовать моему интерфейсу ... и изменение его тоже не кажется хорошей идеей.

из файла readme IЯ вижу, что для его использования мне нужно сделать что-то вроде этого

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

И мое лучшее предположение, что я должен обернуть это в мою собственную реализацию интерфейса.Что-то вроде этогочтобы помочь вам избежать: s.

Является ли этот подход правильным?Если нет, то как бы вы это сделали?

Пожалуйста, помогите.

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

Это вполне приемлемо. Вы абстрагируете зависимость TwilioRestClient от класса потребления. Таким образом, вы можете добавить в свои контроллеры FakeSMSService для модульного тестирования. Вам не нужно тестировать модуль Twilio.

0 голосов
/ 13 мая 2014

В блоге twillio есть действительно хорошая статья об этом, мы не используем контроллеры mvc для нашего проекта, поэтому мы не можем использовать его, но делимся ссылкой, если она вам поможет.

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

Статья была немного над моей головой, но выглядит полезной.

...