2009-09-16 2 views
4

속성을 만들 속성을 만들고 싶습니다.속성 호출 후 코드 실행을 나타내는 C# 생성 속성

이 속성을 포함 할 속성은 새 값을 설정 한 후에 다른 메서드를 실행합니다. 예를 들어

:

여기
[MethodExecute(Log)] 
    [MethodExecute(Save)] 
    public string Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 

나는 두 가지 방법을 활성화하고자, 하나는 변화를 기록하고 다른 저장됩니다.

덕분에, 로니

답변

5

난 당신이 PostSharp에서이 작업을 수행 할 수 있으리라 생각합니다. 불행하게도 메서드 이름을 문자열로 지정해야합니다. 몇 번 제안되었지만 메서드 이름을 MethodInfo으로 해결하는 연산자가 C#에 없습니다.

당신은 (오히려 게터 이상) 세터 후 을 실행하는 코드를 필요로하는 경우 속성을 이동해야 할 수 있습니다

public string Name 
{ 
    get; 
    [MethodExecute("Log")] [MethodExecute("Save")] set; 
} 

(이것은 편의를 위해 자동으로 구현 된 속성을 사용합니다.)

+0

+, 나는 PostSharp에서 아주 좋은 경험을했습니다. – TcKs

+0

실무 위대한 :) – Ronny

1

.NET Framework에 AOP (Aspect-Oriented Programming)를위한 후크가 있는지 여부에 대해 정말로 묻고 있습니다. 아쉽게도 대답은 아니요이며 기본적으로 아닙니다.

이렇게 할 수있는 프레임 워크가 많이 있지만 대부분의 경우 특수화 된 팩토리에서 이렇게 장식 된 유형을 작성해야합니다.

    많은 DI 컨테이너에는 그렇게 할 수있는 차단 기능이 있습니다. 그러한 DI 컨테이너의 예는 Castle Windsor입니다.
  • 마이크로 소프트 패턴 & 사례는 한 번 이런 시나리오를 가능하게하는 Policy Injection Application Block을 만들었습니다.
  • 더 특수화 된 경우에는 특정 하위 프레임 워크에서도이를 볼 수 있습니다. ASP.NET MVC에는 MVC 파이프 라인에서 호스팅 할 때만 ActionFilter라는 기능이 있습니다.

또한 IL을 컴파일 한 후에 수정하여이 작업을 수행 할 수있는 프레임 워크가 몇 가지 있습니다.하지만 필자가 알고 있듯이 꽤 심각한 단점도 있습니다.