У меня есть требование, чтобы иметь возможность выполнять много преобразований внешних моделей в мои собственные внутренние модели.
Я решил применить шаблон адаптера, но я хочу сделать его как можно более универсальным. Поэтому я хочу, чтобы он обрабатывал оба «одиночных» POCO, но если мне нужно передать / адаптировать коллекцию, это также должно сработать, например:
IEnumerable<IAdaptee> OR IList<TAdaptee>
и вернуть мои собственные адаптированные объекты:
IEnumerable<IAdapted> OR IList<TAdapted>
Я хочу сделать что-то вроде следующего:
public interface IGenericAdapter
{
TAdapted Adapt<TAdapted,TAdaptee>(TAdaptee adaptee);
}
Когда я отклеиваюсь, когда я создаю свой класс «Адаптер», а затем реализую описанный выше интерфейс, я получаю ошибки несоответствия ограничений. Это, конечно, имеет смысл, потому что если я применяю ограничения к классам, которые реализуют интерфейс, а у интерфейса их нет, то, конечно, возникают ошибки.
Итак:
public class AToBAdapter
{
public TAdapted Adapt<TAdapted,TAdaptee>(TAdaptee adaptee)
where TAdapted: IList<FooAdapted>
where TAdaptee: IList<FooAdaptee>
{
// I want my constraints to be active here, as I need to perform specific operations here
}
}
Вышесказанное прекрасно работает само по себе, что хорошо. Но я хочу спрятать все это за общим интерфейсом, который я могу использовать в любое время.
Конечно, как только я добавлю это, произойдет сбой из-за отсутствия ограничений на интерфейс, но ограничений на реализующий класс.
public class AToBAdapter:IAdapterGeneric
Какая здесь волшебная пуля, которая позволит мне создать действительно универсальный Адаптер - я предполагаю определенные ограничения интерфейса? Кастинг? но нужна помощь для лучшего курса действий.
Спасибо,
Чудь