AOP란 무엇인가요? 바이두 백과사전을 인용하자면: AOP는 Aspect Oriented Programming의 약자로, 이는 실행 시 사전 컴파일 방법과 동적 에이전트를 통해 프로그램 기능을 통합적으로 유지보수할 수 있는 페이스 지향 프로그래밍 기술입니다. AOP를 구현하는 주요 방법은 두 가지가 있는데, 하나는 컴파일 시점의 정적 임플랜테이션으로, 장점은 높은 효율성이며, 단점은 유연성 부족이며, .net 하의 postsharp가 대표적입니다(이 경우 유료). 다른 방법은 동적 프록시로, 이는 전자와 반대되는 장단점을 가지며, 대상 유형에 대한 프록시를 동적으로 생성하고 프록시 호출을 통해 이를 가로채는 방식입니다. AOP가 할 수 있는 일반적인 사용 사례는 트랜잭션 처리, 로깅 등입니다. Autofac이 AOP를 어떻게 구현하는지 이야기해 봅시다. Autofac은 .net 하에서 매우 좋은 IOC 컨테이너이자 성능도 뛰어나며(.net 하에서 가장 효율적인 컨테이너), 그리고 AOP는 그냥 강력한 도구입니다. Autofac의 AOP는 Castle의 핵심 부분(역시 컨테이너) 프로젝트인 Autofac.Extras.DynamicProxy를 통해 구현되며, 이름에서 알 수 있듯이 동적 프록시로 구현됩니다.
사용 전 준비:
Nuget 패키지 Autofac, Autofac.Extras.DynamicProxy를 설치하면 성공적으로 설치되면 세 개의 참조가 추가됩니다
이제 공식적으로 시작됐어!
1단계: 요격기 생성
아래는 가로채는 방법의 이름, 매개변수 목록, 반환 결과를 보여주는 간단한 인터셉터의 예시입니다
2단계: 인터셉터를 오토팩 컨테이너에 등록하기
인터셉터는 인터셉터 종류 또는 이름으로 Aufofac 컨테이너에 등록되어야 하며, 이는 인터셉터 사용 방식이 다르게 만듭니다(나중에 논의됨).
이름 주입 건축가. Register(c => new CallLogger(Console.Out))). 이름<IInterceptor>("로그콜");
타입 주입 건축가. Register(c => new CallLogger(Console.Out));
3단계: 요격기 활성화
인터셉터를 활성화하는 주요 방법은 두 가지가 있습니다: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors 메서드는 인터페이스 프록시를 동적으로 생성합니다
EnableClassInterceptors 메서드는 대상 클래스의 서브클래스 프록시 클래스를 생성하며, 여기서 참고로 가상 메서드만 가로채고 메서드를 덮어쓰는 역할을 합니다
인터셉터 샘플 코드 활성화:
4단계: 가로채고자 하는 유형을 지정합니다
두 가지 방법이 있습니다:
첫 번째 유형: 유형에 특징 속성을 추가합니다
두 번째 유형은 등록 유형이 컨테이너로 전송될 때 인터셉터에 동적으로 주입하는 방식입니다
5단계: 효과 테스트
1. 프록시 가로채기
서클 클래스 코드:
2. 인터페이스 프록시 가로채기
IShape 인터페이스 코드:
서클 클래스 코드:
|