2013-04-02 3 views
0

소스 코드를 볼 수없는 타사 소프트웨어를 사용하는 Winforms 프로그램을 상속했습니다. 이 코드에서 메소드를 호출 할 때 소프트웨어가 검사하는 판독기에 연결해야합니다. 불행하게도 연결은 때때로 사라지는 것처럼 보이고 숨겨진 기능으로 인해 프로그램이 자동으로 실패합니다. 모든 클래스에 try catch를 사용하지 않고이 클래스의 모든 호출을 처리 할 수있는 방법이 있습니까?전체 클래스 처리 중 오류가 발생했습니다.

소프트웨어는 리더 클래스를 이런 식으로 뭔가를 보이는 우리가 여러 모듈에서 동일한 판독기에 액세스 할 수 있도록 사용 :

public class Reader 
{ 
    private ThirdPartyReader thirdPartyReader; 

    public ObjectReport QueryObjects() 
    { 
     return thirdPartyReader.QueryObjects(); 
    } 

    public Settings QuerySettings() 
    { 
     return thirdPartyReader.QuerySettings(); 
    } 
} 
+2

Winforms? WPF? – phadaphunk

+0

당신이 말할 때 : "이 코드에서 메소드를 호출 할 때"나는 당신이 내부적으로 진행되는 것을보기 위해 IL 디스어셈블러를 사용할 수 있다면, 당신이 제 3 자로부터 DLL을 빼앗고 있다고 가정하고 있습니다 - 이것은 전반적인 문제를 해결하지 못합니다. –

+0

[무엇을 시도해 봤습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

답변

1
public static class Extensions 
    { 
     public static TResult Try<TObject, TResult>(this TObject source, Func<TObject, TResult> method, string message = null) 
     { 
      try 
      { 
       return method(source); 
      } 
      catch (Exception e) 
      { 
       //Some Logging or whatever, optionally using the message parameter; 
       return default(TResult); 
      } 
     } 
    } 

사용법 :

 var reader = new ThirdPartyReader(); 
     var objects = reader.Try(x => x.QueryObjects()); 
     var settings = reader.Try(x => x.QuerySettings(), "Error Reading Settings"); 

그것은 정말 그다지 다르지 않습니다. 왜냐하면 여러분은 여전히 ​​메소드를 호출하는 대신 reader.Try()를 사용해야 만합니다. 그러나 이것은 매우 약식 인 구문입니다.

+0

답변 주셔서 감사합니다. 이것은 내가 가지고있는 wrapper와 꽤 비슷합니다. 이것이 최선의 해결책으로 판명되면 나는 이것을 답으로 표시 할 것입니다. – SeanVDH

관련 문제