Выбор типа внедрения зависимости

Недавно я столкнулся с проблемой, когда мне нужно выбрать тип на основе параметра. Например: класс, используемый для отправки уведомлений, который должен выбрать правильный канал (электронная почта, смс, ...) на основе входного параметра.

Я выгляжу примерно так:

public class NotificationManager 
{
    IEmail _email;
    ISms _sms;

    public NotificationManager (IEmail email, ISMS sms) 
    {
        _email = email;
        _sms = sms;
    }

    public void Send(string type) 
    {
        switch(type) 
        {
            case "email":
                _email.send;
                break;

            case "sms":
                _sms.send;
                break;
        }
    }
}

Проблема здесь в том, что когда я использую этот вид конструкции, конструктор быстро становится очень большим со всеми различными способами отправки уведомлений.

Мне действительно не нравится это, и это делает юнит-тестирование этой единицы выбора неуправляемым.

Я не могу просто сказатьnew email(); потому что электронная почта типа уведомления будет полагаться на IEmailManager, и это только решит проблему.

Есть ли какая-то модель, которая будет делать то же самое, но лучше и чище?

Ответы на вопрос(1)

Ваш ответ на вопрос