Шаблон C # для кода, специфичного для абстрактного класса

У меня есть абстрактный класс «Action», который имеет производные типы ActionAppointment, ActionCall, ActionEmail и ActionLetter. Я пытаюсь написать функцию, которая ОСУШИТ наш уровень обслуживания, поэтому мы больше не будем писать вызовы CRUD 5 раз.

У меня есть в нашем слое обслуживания некоторая логика обновления (много другого кода удалено для краткости):

private IServiceResponse UpdateAction<T>(T action, string originalActionStatus) where T : Action
{
        if (action.GetType() == typeof(Action))
        {
            _actionRepository.Update(action);
        }
        else if (action.GetType() == typeof(ActionAppointment))
        {
            _actionAppointmentRepository.Update(action as ActionAppointment);
        }
        else if (action.GetType() == typeof(ActionCall))
        {
            _actionCallRepository.Update(action as ActionCall);
        }
        else if (action.GetType() == typeof(ActionEmail))
        {
            _actionEmailRepository.Update(action as ActionEmail);
        }
        else if (action.GetType() == typeof(ActionLetter))
        {
            _actionLetterRepository.Update(action as ActionLetter);
        }
}

К сожалению, из-за того, как настроены наши репозитории, я должен использовать репозитории с конкретными именами (т. Е. Я не могу обновить ActionLetter через _actionRepository, даже если он является производным от Action)

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

Я упустил какую-то глупость?

6
задан mandreko 23 June 2011 в 20:05
поделиться