2011-04-11 3 views
2

우리 프로젝트 중 하나에 PostSharp를 도입하는 과정이 진행 중입니다. 지금까지 훌륭하게 작동했습니다! 조건부로 조언을 해고하는 방법 : 해결할 수 없었던 한 가지가 있습니다.PostSharp 2.0에서 조건부로 조건을 발생시키는 법

세부 사항 : 은 - 우리가 그것을 가능하게하는 속성 StopWatchAttribute이 방법 를 실행하는 데 필요한 시간을 기록해야합니다 -이 속성은 받아 1, 2, 0과 같은 값으로 설정 파일에 설정되어 열거 "LoggingLevel" -이 매개 변수는 런타임 중에 BaseService라는 기본 클래스에서 읽 힙니다. new BaseService(). CurrentLoggingSettings - StopWatchAttribute (new BaseService(). CurrentLoggingLevel)와 같은 속성 생성자를 설정하려고했지만 컴파일 오류가 발생했습니다. attribute 인수는 상수 표현식, typeof 표현식 또는 속성 매개 변수 유형의 배열 작성 표현식이어야합니다.

-> 요약 : 조언을 조건부로 호출하고 조건은 속성 생성자의 매개 변수에 따라 달라집니다.

이 작업을 수행 할 수 있습니까? 당신의 도움에 대한

감사합니다, 안드라스

답변

4

당신은 속성, PostSharp 여부에 변수를 줄 수 없다. config에서 값을 이미 읽었으므로 Initialize() 메서드에서 동일한 값을 사용하도록 aspect를 설정하면됩니다. 애스펙트 클래스에서 오버라이드 한 다음 값을 로컬 필드에 저장하십시오. 애스펙트 전체에서 해당 필드를 사용할 수 있습니다. 이것은 본질적으로 하드 코딩하는 aspect에 값을 컴파일합니다.

또는 조언 메서드 (OnMethodStart 등)에서 구성의 값을 가져 와서 런타임에 구성에서 변경할 수 있습니다. 이것은 하드 코딩을하지 않기 때문에보다 유연한 방법입니다.

변수가 런타임에 설정된다는 것을 기억하십시오. PostSharp는 post-compile 프레임 워크이므로 변수가 JIT에 알려지기 훨씬 전에 오랜 시간이 걸립니다.