나는 try catch 내에서 래핑되도록 메서드 호출을 전달할 수 있다고 생각하는 다음 메서드를 작성했습니다. 내 응용 프로그램 전체에 걸쳐 동일한 try/catch 보일러 플레이트 코딩을하지 않으려 고합니다. 나는 이미 20 번의 전화를 받았고, 우리가 끝내면 수백 건의 전화가 걸릴 것입니다. 내가 예상대로이 작동하지 않는 처음에는 몰랐어요재사용 가능한 시도/캐치 블록
var results = CallRepository<VisitLogDTO>(visitLogRepository.AddVisit(visitLogDTO));
: 같은
protected T CallRepository<T>(T repositoryMethod)
{
try
{
return repositoryMethod;
}
catch (Exception ex)
{
logger.Error(ex);
throw new DatabaseException();
}
}
호출 방법은 같습니다. 무슨 일이 일어나고 결과는 try/catch하지만 메서드 호출에 래핑되고있다. visitLogRepository에서 데이터베이스 오류 또는 오류가 발생하면 새 DatabaseExeception이 아니라 원래 오류가 발생합니다.
도움을 주시면 감사하겠습니다. 좋아
protected T CallRepository<T>(Func<T> repositoryMethod)
{
try
{
return repositoryMethod();
}
catch (Exception ex)
{
logger.Error(ex);
throw;
}
}
및 사용 :
을 당신은 메소드를 호출하지 않습니다. 'visitLogRepository.AddVisit (visitLogDTO)'의 결과를 전달합니다. 원하는 것은 CallRepository가 Func <> 매개 변수를 사용한다는 것입니다. – WeSt
여기에 아주 좋은 정보가 있습니다. 현재는 문제가 해결되어 도움을 주셔서 감사 드리며 도움이 얼마나 빨리 도착했는지 놀랐습니다. 나는 DI 차단을 살펴보고 사용할 수 있는지 알아볼 것입니다. 그러나 지금은 Func에 대한 WeSt & Eren Ersönmez 조언을 사용하고 있습니다. 나는 성공하기 전에 Func <>를 사용해 보았습니다. 나는 모든 차이를 만드는 람다 콜을 놓치고 있었다. –
CubeRoot