Castle DynamicProxy을 사용하여 데코레이션 프록시를 쓰고 있습니다.MethodInfo 인스턴스가 속성 접근 자인지 식별
public void Intercept(IInvocation invocation)
{
if (invocation.Method.Name.StartsWith("set_")
{
// ...
}
invocation.Proceed();
}
을 지금이 잘 작동하지만 난 내 프록시의 친밀한 지식을 가지고 사실을 좋아하지 않는다 : 나는 내가 thusly 히 메소드의 이름을 확인하고 전용 속성 (안 읽고) 글을 차단하도록 프록시의 인터셉터가 필요합니다 속성이 구현되는 방식 : 메소드 이름 확인을 다음과 비슷한 것으로 대체하고 싶습니다.
if (invocation.Method.IsPropertySetAccessor)
불행히도 내 Google-fu는 실패했습니다. 어떤 아이디어?
매우 열악합니다. – thepirat000
@ thepirat000 : 음,'GetSetMethod'가 O (1)이면 O (n)이됩니다. 그게 아마도 최적이 아니에요. (똑같이 읽을 수 있고 더 나은 성능을내는 답을 분명히 upvote 할 것입니다.)하지만, 모든 악의 근원이되는 조숙 한 최적화에 대한 말을 알고있을 것입니다 ... – Heinzi
나는 메소드가 "get_"접두사 (casesensitive)를 가지고 메소드 콜렉션 (여전히 O (n) 복잡성 - 오히려 싸다)에서 그것을 제거하는지 확인한다. 추가적으로'Dictionary'인스턴스를 추가하여 O (n)의 복잡성을 제공하지만 나중에 O (1) –