2016-04-05 4 views
3

У меня есть делегат:Logging для каждого метода «делегат»

private delegate void ActivitySteps(string inputFolder, string outputFolder); 

В одном из методов в моем классе я регистрирующих различные мероприятия к нему:

this.activitySteps = A; 
this.activitySteps += B; 

и так далее .. .

Наконец я призываю его:

this.activitySteps.Invoke(inputFolder, outputFolder); 

Теперь я хочу добавить ведение журнала, чтобы я знал, какое из методов i.e не удалось выполнить при вызове делегата. (A или B или некоторые другие). Есть ли способ, которым я мог бы это сделать, чтобы мне не приходилось регистрировать каждый метод и мог централизовать ведение журнала внутри делегата.

+0

Где вы на самом деле возникли проблемы? Зная, как создать журнал или добавить в этот журнал? Вы просто создадите новый регистратор в каждом делегате или передадите его, если вы пишете в один журнал. – Dispersia

+0

Я хочу добавить информацию о регистрации в одном месте при вызове делегата, чтобы мне не пришлось реплицировать ведение журнала во всех методах. – Amber

+0

Возможно, вам будет интересно прочитать [этот ответ] (http://stackoverflow.com/a/374549/284111). Продолжая свое начало, я предлагаю переработать вашу логику, чтобы не полагаться на порядок делегатов. –

ответ

3

Вы можете использовать GetInvocationList() при вызове делегатов:

foreach(ActivitySteps del in this.activitySteps.GetInvocationList()) 
{ 
    try 
    { 
     del.Invoke(inputFolder, outputFolder); 
    } 
    catch(Exception ex) 
    { 
     Console.WriteLine("{0} threw {1}", del.Method.Name, ex); 
    } 
} 
+1

Прохладный, мне не нужно писать правильный ответ на этот вопрос, потому что вы уже это сделали. –