2013-06-08 1 views
0

Я работаю над приложением архитектуры 3tier. В котором A() метод в 1-м слое вызывает метод B() во втором слое, который вызывает метод C() на третьем уровне и в обратной последовательности возвращает ответ.Трассировка в C# для записи трассировки в том же порядке метода вызывается в трехуровневой архитектуре

В каждом методе я использую StringBuilder для создания строковой трассировки выполнения метода и записывает его с использованием библиотеки Microsoft Enterprinse, чтобы в конечном итоге блокировать.

A() 
{ 
    string.append("A() method started"); 
    B(); 
    string.append("A() method finished"); 
} 

B() 
{ 
    string.append("B() method started"); 
    C(); 
    string.append("B() method finished"); 
} 

C() 
{ 
    string.append("C() method started"); 
    some...task; 
    string.append("C() method finished"); 
} 

то след:

string.append("C() method started"); 
string.append("C() method finished"); 
string.append("B() method started"); 
string.append("B() method finished"); 
string.append("A() method started"); 
string.append("A() method finished"); 

, который находится в обратном порядке. Но я хочу

string.append("A() method started"); 
string.append("B() method started"); 
string.append("C() method started"); 
string.append("C() method finished"); 
string.append("B() method finished"); 
string.append("A() method finished"); 

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

ответ

0

Да, я согласен с этим предложением. Вы можете попробовать использовать Aspect Oriented Programming (AOP), где вы можете выполнить перехват метода. Although you can do this via reflection and some other namespaces., но это боль в попке.

Хотя, по умолчанию C# не является AOP-языком, существуют библиотеки, доступные для применения концепций AOP к C#. Один из них - PostSharp. Я считаю, что вы можете получить пробную/бесплатную версию этого. Я нахожу его простым в использовании и довольно простым.

Смежные вопросы