저는 지난 이틀 동안 ASP.NET을 작성하느라 어지러웠고 항상 게으르고 싶었습니다. 백그라운드 코드의 거의 모든 메소드에는 try..catch가 필요하므로 매우 번거롭게 느껴집니다. AOP도 생각나는데, AOP의 방법은 비교적 복잡하고 방법도 많습니다. 예를 들어 동적 프록시, 속성 또는 내보내기 등을 사용합니다. 문득 C# 2.0의 새로운 기능인 익명 위임이 생각났고, 좀 못생겼다고 생각했습니다. . . 그러나 실제로는 비교적 간단한 방식으로 AOP의 효과를 간단히 시뮬레이션할 수도 있습니다.
// asp.net에서 페이지 기본 클래스를 강제 적용하는 요구 사항은 과도하지 않습니다. . .
공개 부분 클래스 TestLogger: PageBase {
protected void Page_Load(객체 전송자, EventArgs e) {
// 이 메소드는 페이지 기본 클래스에 구현되어 있으며, 일반적인 예외 처리, 로깅 로직 등을 구현할 수 있습니다.
시도하세요(
// 실제 작업이 수행되는 곳입니다.
대리자() {
int a = 1;
int b = 0;
int c = a / b;
},
// 이것은 선택적 예외 처리입니다. null을 전달하면 예외가 무시됩니다.
대리자() {
Response.Write("죄송합니다. 오류가 발생했습니다.");
}
);
}
}
페이지 기본 클래스의 구현 코드는 매우 간단하며, 쉽고 균일하게 관리할 수도 있습니다. 여기서는 단순히 log4net을 사용하여 예외를 기록한다고 가정합니다.
시스템 사용;
System.Web.UI 사용;
log4net을 사용하여
네임스페이스 SomeNamespace {
//익명 대리자를 전달하기 위한 간단한 대리자를 정의합니다.
공개 대리자 void MyAction();
//페이지 기본 클래스 정의
공개 클래스 PageBase : 페이지 {
protected ILog logger;
// 모든 예외 처리 로직은 페이지 기본 클래스에서 중앙에서 처리됩니다.
protected void TryDo(MyAction doHandler, MyAction ExceptHandler) {
노력하다 {
// 실용적인 일을 하세요
doHandler();
} catch (예외예외) {
//간단한 예외 로깅
로거.Error(ex);
// 기타 처리
// . . .
// 사용자 정의 예외 처리를 호출합니다. 예외에 대한 특정 정보는 여기에 반환되지 않습니다. 어차피 사용자에게 보여줄 필요가 없기 때문입니다. . .
if (제외Handler != null)
제외핸들러();
}
}
보호된 재정의 void OnInit(EventArgs e) {
// 로거 초기화. 바로 여기서 GetType()이 하위 클래스의 실제 유형을 얻을 수 있습니다.
logger = LogManager.GetLogger(this.GetType());
base.OnInit(e);
}
}
}
알았어, 여기서는 그만 쓰자. 이것은 단지 나의 단순한 생각이다. 그 목적은 가벼운 방식으로 예외 또는 로그의 중앙 집중식 관리를 구현하는 것입니다. 물론 이는 완전한 AOP 개념과 비교할 수 없지만, 말하자면 현재 .NET에는 완벽한 AOP 프레임워크가 없는 것 같습니다.
http://www.cnblogs.com/RChen/archive/2006/11/16/aspnet_Exception_handling.html