2017-11-20 1 views
0

모든 클래스를 참조하지 않고 한 곳에서 모든 오류를 처리하고 싶습니다.클래스 참조없이 오버라이드 예외 클래스 및 핸들 오류

내 현재 구조를 참조하십시오.

public ActionResult Login(string returnUrl) 
{ 
    try 
    { 
     var a = 10; 
     var b = 0; 
     var c = a/b; 
    } 
    catch (Exception ex) 
    { 
     throw new LogEroor("", ex); 
    } 

    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

및 오류 처리 클래스.

public class LogEroor : Exception 
{ 
    public LogEroor(string message, Exception Ex) : base(message, Ex) 
    { 
     // error handling 
    } 
} 

내 질문

오류가 발생 때이 전 매개 변수로 LogError 메서드를 호출 할 수있는 방법이 있나요,하지만 난 호출 각각의 모든이 방법 싶지 않아 내가 여기에서했던 것처럼을 붙잡아 라.

+1

메서드 나 심지어 생성자를 지정하지 않고 어떻게 호출 할 것으로 예상합니까? 당신이 원하는 것은 전혀 이해가되지 않습니다. 물론 모든 클래스가 범용 예외 클래스를 참조해야합니다. 당신은 ['AppDomain.UnhandledExceptionHandler'] (https://msdn.microsoft.com/library/system.appdomain.unhandledexception (v = vs.110) .aspx)에 등록 할 수 있습니다. – HimBromBeere

답변

4

이것은 일반적으로 XY problem입니다. 해결하려는 실제 문제 X는 다음과 같이 바꿔 쓰여 있습니다.

웹 응용 프로그램에서 발생하는 모든 예외를 기록하고 싶습니다. Y는

귀하의 솔루션은 의역 :

내가 로깅을 할 것입니다있는 예외, 상속, 그리고 수 있도록 내 예외 유형으로 변환 throw되는 예외를 원할 것입니다

예외가 발생할 수있는 모든 장소에서 try-catch 블록을 작성하지 않고도 기록 될 수 있습니다.

이제 문제 Y에 대한 도움을 받고 싶지만, 잘못된 접근 방법입니다. AppDomain.UnhandledException event을 사용하여 수행 할 수 있지만 그렇게해서는 안됩니다.

귀하의 솔루션은 How do I log ALL exceptions globally for a C# MVC4 WebAPI app?입니다 : 예외 필터를 사용하십시오.

1

메서드 또는 생성자를 지정하지 않고 어떻게 호출 할 것으로 예상합니까? 당신이 원하는 것은 전혀 이해가되지 않습니다. 물론 모든 클래스는 까지을 던지면 일반 예외 클래스를 참조해야합니다.

에 등록 할 수 있지만 이 아닌 예외에 대한 일반 처리기입니다. 그래서 그 대신 모든 예외를 잡기을 whrapping 에 의해 다시 던지는 당신은이를 사용할 수 있습니다

AppDomain.UnhandledExceptionHandler += (sender, args) => { throw new LogError(args.ExceptionObject); }; 

하지만이 앱이 예외 처리의 마지막 계층 내에서 예외를 슬로우 이런 식으로. 즉, 결코 잡히지 않는 예외를 throw하여 앱이 다운 될 수 있음을 의미합니다. 이를 피하려면 해당 이벤트 내에서 직접 로깅을 구현하십시오.

+0

괜찮습니다, 고마워요 .. – Bharat