Начну с того, что я новичок в перехвате.Есть ли способ использовать перехват, но оставаться независимым от рамки AOP за
Я хочу заменить некоторые существующие реализации моего проекта путем привлечения перехвата в игру, но я заметил, что он на самом деле приносит мне быть очень тесно связан с АОПОМ позади (либо Castle.DynamicProxy
, Unity.Interception
, LinFu.AOP
, тем же историей). Что делать, если мне нужно переключаться между ними? (есть много причин, почему).
Итак, всякий раз, когда мне приходится создавать разные перехватчики, эти перехватчики должны соответствовать определенной структуре AOP. Существует всегда нужно носить рамочный конкретную информацию вызова АОП (и, таким образом, чтобы ссылаться на АОП сборки)
Простой пример, показывающий, «до» перехватчик с замком DynamicProxy:
public abstract class BeforeInterceptor : IInterceptor
{
void IInterceptor.Intercept(IInvocation invocation)
{
Before(invocation);
invocation.Proceed();
}
protected abstract void Before(IInvocation invocation);
}
Как я понял, IInvocation должны быть перенесены в реализацию перехватчика, для лучшего контроля при вызове метода на цель.
Каковы ваши предложения и рекомендации. Возможно, я вижу это под неправильным углом.
PS: При использовании таких библиотек для DI это не так, нет такой жесткой связи.
Если это всего лишь один или два класса, то самым простым способом было бы вручную раскрутить ваши собственные Декораторы. Если у вас есть нечто большее, вы можете создать декораторы с использованием Roslyn/Code gen, возможно, с шаблонами T4 и/или настраиваемыми действиями в вашей сборке. Если вам нужен код потребления, чтобы не «знать» о типе декоратора, то могут помочь пользовательские дескрипторы типов. –
Спасибо за рекомендации Тоби! – Learner