Определить, включен ли ELMAH? - PullRequest
4 голосов
/ 31 января 2010

Как программно определить, включен ли ELMAH ?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2010

Вы можете перечислить все загруженные модули (через HttpApplication.Modules ), и если модуль Elmah существует, то Elmah включен:


foreach (var m in Application.Modules) {
  if (m is Elmah.ErrorlogModule) {
   // ...
  }
}

Не уверен. Не трогай это.

1 голос
/ 31 января 2010

Потому что:

ELMAH можно динамически добавлять в запуск веб-приложения ASP.NET или даже все веб-приложения ASP.NET на машина, без необходимости повторная компиляция или повторное развертывание.

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

Интересно ?: Как заставить ELMAH работать с атрибутом ASP.NET MVC [HandleError]? (принят автором ELMAH)

0 голосов
/ 13 июля 2011

В дополнение к ответу Тадаса я придумал следующий код, который работает для меня (обратите внимание, что я перевел это из VB, не проверяя, компилируется ли он, поэтому YMMV):

bool foundElmah = false;

foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
    var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
    if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
        foundElmah = true;
        break;
    }
}

if (foundElmah) {
    // do something here, like populate the application cache so you don't have to run this code every time
    return true;
} else {
    // store in application cache, etc.
    return false;
}

Это также позволяет обойти проблемы, с которыми я столкнулся при получении ответа 401 при запросе elmah.axd (я использовал проверку подлинности Windows), и работает намного быстрее и не предполагает конкретного расположения для elmah.axd.

...