Какой самый простой способ перехватить вызов метода для дополнительной функциональности?

Предположим, у меня есть репозиторий, который возвращает список Post s. В интерфейсе репозитория есть метод GetAll () , который делает то, что предлагает.

Теперь, в соответствии с теорией, что мне не следует помещать логику домена в репозиторий, я хочу перехватывать вызовы конкретного метода GetAll () , чтобы я мог добавить следующую логику к результату GetAll () :

return GetAll().OrderByDescending(p => p.Posted).ToList();

Причина, по которой я хочу это перехватить, - потому что (1) я не хочу, чтобы клиент не забывал вызывать метод расширения ( OrderByDescending или какая-то бесполезная оболочка этого), я хочу, чтобы он вызывался каждый раз, и (2) я не хочу чтобы иметь все мои конкретные реализации, нужно помнить о том, чтобы упорядочить результат GetAll () - я хочу, чтобы эта логика находилась в одном месте, внешнем по отношению к любому репозиторию.

Какой самый простой способ сделать это?

Я уже использую StructureMap , поэтому, если я смогу перехватить это, это может быть недорогой вариант. Но я не думаю, что SM перехватывает вызовы методов, только создание экземпляра объекта?

Нужно ли мне переходить на прокси или миксин шаблон? Нужно ли мне идти ва-банк с Castle Dynamic Proxy ? Или есть другой метод , который я должен рассмотреть, или, возможно, комбинация?

Меня действительно интересует конкретное предложение для моего конкретного примера выше. Я новичок в АОП, поэтому будьте осторожны.

6
задан Matt Kocaj 4 January 2011 в 01:18
поделиться