Есть ли способ использовать перехват, но оставаться независимым от AOP Framework позади

Я начну с уточнения, что я новичок в перехвате.

Я хочу заменить существующую реализацию моего проекта введением Interception в игру, но я заметил, что это на самом деле приводит меня к очень тесной связи со структурой AOP (Castle.DynamicProxy, Unity.Interception, LinFu.AOP, та же история). Что если мне придется переключаться между ними? (Есть много причин, почему).

Таким образом, всякий раз, когда мне нужно создать разные перехватчики, эти перехватчики должны соответствовать определенной структуре АОП. Всегда необходимо нести специфичную для AOP информацию о вызовах (и, таким образом, ссылаться на сборки AOP)

Простой пример, показывающий перехватчик "before" с помощью Castle DynamicProxy:

public abstract class BeforeInterceptor : IInterceptor 
{
     void IInterceptor.Intercept(IInvocation invocation) 
     {
       Before(invocation);
       invocation.Proceed();
     }

     protected abstract void Before(IInvocation invocation);
}

Как я понял, IInvocation должен быть перенесен в реализацию перехватчика для лучшего контроля, когда метод вызывается на цели.

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

PS: при использовании таких библиотек для DI это не так, такой тесной связи нет.

1 ответ

Соединение ваших перехватчиков с реализацией DI не так уж и плохо. Причина, по которой код находится в перехватчике, заключается в том, что он не принадлежит классу, чей метод перехватывается. Обычно это поведение, которое вы не хотите связывать с вашим классом, и это не входит в обязанности этого класса. Так что если вы соединяете свои перехватчики вместо своих "основных" классов, то это достойный компромисс. Это держит эти классы отсоединенными.

Кроме того, настройка вашего DI-контейнера не обязательно должна быть в том же проекте, что и связанные классы. Если вы хотите, у вас может быть установщик Виндзора, чтобы соединить ваши классы и перехватчики для Виндзора и еще один для единства. Это дублирование, но тот факт, что вы можете иметь оба, означает, что вы не связаны технически ни с одним из них.

И код в ваших перехватчиках обычно довольно минимален. Если он делает что-то слишком сложное, то, возможно, ему там не место.

Другие вопросы по тегам