Другой вариант - создать класс-обертку для абстрагирования стороннего объекта от вашей библиотеки, а затем при отладке использовать фиктивный класс-обертку вместо живого компонента.Дополнительным преимуществом этого метода является то, что ваш макет может быть легко запрограммирован для выгрузки электронных писем в файл, чтобы вы могли видеть, как будет выглядеть вывод электронной почты (или создавать программные тесты для проверки содержимого электронной почты для определенных операций, безвключая почтовый сервер).
Например, у вас может быть класс с именем Emailer, который принимает экземпляр IEmailProvider для использования при отправке электронной почты (IEmailProvider.SendEmail (...)).Тогда у вас может быть два класса, которые реализуют IEmailProvider, один, который вызывает стороннюю библиотеку и используется по умолчанию в вашем приложении, а другой - ваша фиктивная оболочка, которая ничего не делает с содержимым или записывает его на диск.Итак, что-то вроде:
public class Emailer{
private IEmailProvider _provider;
public Emailer(IEmailProvider provider){
_provider = provider;
}
public SendEmail(...){
_provider.SendEmail();
}
}
interface IEmailProvider{
SendEmail(...);
}
public RealEmailProvider : IEmailProvider{
// ... real code to implement send email method
}
public FakeEmailProvider : IEmailProvider{
public SendEmail(...){ /* Do Nothing? */ }
}
Не зная, как настроен ваш код, я не знаю, будет ли использование Singleton для электронной почты лучшим выбором, своего рода ручное внедрение зависимости, средство внедрения зависимости,или, может быть, даже другие методы.
Дополнительным преимуществом этого способа является то, что если вы позже захотите добавить дополнительную логику для регистрации каждого электронного письма, общаться по-другому или заменить этот компонент электронной почты, все, что вам нужно сделать, это обновить свой реальныйЭкземпляр EmailProvider, не касаясь какого-либо кода, который создает и решает отправить письмо.Это также означает, что вам не нужно устанавливать какое-либо дополнительное стороннее программное обеспечение, что снижает сложность среды разработки или тестирования.