Как заменить идентификатор события на enum? - PullRequest
0 голосов
/ 04 января 2019

У меня есть класс, который наследуется от EventSource:

[EventSource(Name = "MyEventSource")]
public sealed class ExceptionHundler : EventSource
{
    public static ExceptionHundler Log = new ExceptionHundler();
    [NonEvent]
    public void WriteLog(Exception exception)
    {
        UnhandledException(exception.Message);
    }

    [Event(601, Channel = EventChannel.Admin, Message = "Unhandled exception occurred. Details: {0}", Keywords = EventKeywords.None, Level = EventLevel.Critical)]
    private void UnhandledException(string exceptionMsg)
    {
        WriteEvent(601, exceptionMsg, Environment.MachineName);
    }
}

Как вы видите, я устанавливаю Id события в атрибуте Event (его 601).Теперь я хочу создать enum и использовать его вместо идентификатора события, например:

 enum EventType
{
    AppCrashed
}

И атрибут события:

 [Event(EventType.AppCrashed, Channel = EventChannel.Admin, Message = "Unhandled exception occurred. Details: {0}", Keywords = EventKeywords.None, Level = EventLevel.Critical)]

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы можете использовать статический класс с открытыми константами:

public static class EventType
{
    public const int AppCrashed = 601;
}

Не совсем то решение enum, которое вы хотите, но вы заявили , что вы не хотите приводить значение перечислениякаждый раз.Использование будет более или менее одинаковым:

[Event(EventType.AppCrashed, Channel = EventChannel.Admin, Message = "Unhandled exception occurred. Details: {0}", Keywords = EventKeywords.None, Level = EventLevel.Critical)]
private void UnhandledException(string exceptionMsg)
{
    WriteEvent(EventType.AppCrashed, exceptionMsg, Environment.MachineName);
}
0 голосов
/ 04 января 2019

Следующее должно работать

[Event((int)EventType.AppCrashed, Channel = EventChannel.Admin, Message = "Unhandled exception occurred. Details: {0}", Keywords = EventKeywords.None, Level = EventLevel.Critical)]
private void UnhandledException(string exceptionMsg)
{
  WriteEvent(601, exceptionMsg, Environment.MachineName);
}

Не забудьте назначить значения Enum во время объявления.

enum EventType
{
 AppCrashed = 601
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...