이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 22873|회답: 0

[출처] .NET/C#은 Autofac과 DynamicProxy를 통해 AOP를 구현합니다

[링크 복사]
게시됨 2017. 11. 4. 오후 12:21:23 | | | |
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 인터페이스 코드:

서클 클래스 코드:







이전의:VS2010 C# Close Port Tool 소스 코드
다음:JS-MD5 암호화 기능
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com