.NET 4 프레임 워크는 Assembly.IsDynamic
메서드를 제공하지만 .NET 2.0/3.5에서는 그렇지 않습니다..NET 유형이 동적인지 확인 (Reflection.Emit을 사용하여 생성)
사용 사례는 간단합니다 : 로깅 목적으로 동적 프록시에 의해 랩핑 될 수있는 엔티티의 기본 유형 이름을 결정하고 싶습니다 (프록시에 대해 알고있는) NHibernate 또는 Castle에 대한 참조가없는
예를 들어 CatProxYadaYada
일 수도 있지만 Cat
에 관심이 있습니다.
그 유형을 얻는 가장 쉬운 방법은 무엇입니까? 나는이 골격의 생각 : 어셈블리가 Emit
사용하여 생성 된 경우
var type = obj.GetType();
while (IsProxy_Dynamic_Whatever(obj))
type = type.BaseType;
return type;
이것은 프록시가 제공하는 추상화를 깨뜨린 것인데, 그 주된 아이디어는 소비자가 차이점에 대해 알거나 신경 쓰지 않아야한다는 것입니다. 어떤 종류의 벌목을하고 있는지 알고 싶습니다. – Aaronaught
@Aaronaught, 그냥 "Cat # 324 유효성 검사에 실패했습니다"와 같은 항목을 기록하려고합니다.이 방법은 내 Entity 클래스에서 상속 한 객체를 전달합니다. 즉, 코드는 인스턴스가 Cat이라는 (프록시)인지 여부조차 모릅니다. 내가 관심있는 것은 실제로 유형이 아니라 유형 * 이름 *입니다. –