3

DynamicProxy 클래스를 사용하고 있는데이 개념이 상당히 새로워졌습니다. 이 길을 너무 벗어나기 전에 IntelliSense와 타입 안전성이 얼마나 좋은지 궁금합니다.DynamicProxy 클래스는 인텔리 센스/유형 안전성과 함께 잘 작동합니까?

나는 단지 Castle DynamicProxy (또는 다른 것들)과 같은 것을 사용하는 것을 두려워하고 내 물건을 사용하면 IntelliSense 또는 유형 안전을 제공하지 않는다는 것을 알아 채며 모든 것을 설정 한 후에. 누구든지 이것에 대해 어떤 생각을 밝힐 수 있습니까?

답변

1

을 보려면이 링크에서 살펴보고, 그들이 인텔리 센스를 지원하는지 여부와 만약 그렇다면 ... 어떻게 할 수 있습니까?

은 음, DynamicProxy 클래스가 작동하는 방법 을 설명, 당신은 유형 안전, 어떻게 그들이 그렇게 잘 IntelliSense를 작동 할 수있는 이유에 대한 명확한 이해를해야합니다.


먼저 DynamicProxy가 실제로 무엇인지 이해해 봅시다. 프록시 클래스는 다른 클래스를 대신하여 멤버 호출을 처리하는 클래스입니다. 이것은 상속 (가장 일반적인) 또는 구성을 통해 이루어집니다.

public class Customer 
{ 
    public virtual string Name { get; set; } 
    // etc... 
} 

public class CustomerProxy : Customer 
{ 
    public override string Name 
    { 
     get 
     { 
      // Do additional functionality... 

      return base.Name; 
     } 
     set 
     { 
      // Do additional functionality... 

      base.Name = value; 
     } 
    } 
} 

두 (2) 주요 기능이 적절하게 작동, 상속 및 다형성에 중요한 역할을 : 당신이한다면 그래서, 프록시 클래스를 손으로 쓰기, 여기 모습 수있는 것입니다. 따라서 Customer 클래스를 원활하게 사용하려면 ProxyGeneratorCustomerProxy 클래스의 인스턴스를 만들고, Customer 유형으로 반환하면됩니다. 기본적으로 Customer customer = new CustomerProxy();을 수행하는 것과 동일한 작업입니다. "동적"부분은 실제로 .NET dynamic 키워드와 관련이 없지만 "런타임"은 응용 프로그램이 실행되는 동안 런타임에 프록시 클래스가 생성된다는 것을 의미하기 때문에 "런타임"으로 읽어야합니다. 컴파일 타임에.그것은이, 그것은 DynamicProxy가 무엇의 간단한 버전의 System.Reflection.Emit


를 사용 않는 방법 아, 그리고 경우에 당신이 궁금합니다. 다른 프레임 워크는 이러한 프록시 클래스를 생성 할 때 다른 기능을 제공합니다. 예를 들어, Castle Windsor의 DynamicProxy에서는 Mixins를 만들고 이러한 프록시 클래스에 추가 인터페이스를 적용 할 수 있습니다. 즉 과 같이 Customer 클래스 자체가 ISomeInterface을 구현하지 않았더라도 생성 된 프록시 클래스는 다음과 같이 표시 될 수 있습니다. Castle의 DynamicProxy (http://kozmic.net/dynamic-proxy-tutorial/)에 대한 훌륭한 자료입니다. 이러한 기능에 대한 다양한 기능과 사용 사례를 거칩니다.

0

intellisense가 안전하게 작동하므로 유형이 안전합니다. 이 예 참조 : DynamicProxy tutorial

프록시 클래스를 인스턴스화하기 위해 제네릭을 사용하고 있음을 알 수 있습니다. 그것은 완전히 타입 화되어 있으므로 걱정할 필요가 없습니다.

0

프록시는 호출 인터셉터 (프록시 구현의 종류의 따라)으로 간주, 그래서 당신은 IntelliSense를를 얻을 것이다 있도록 정의 된 인터페이스 나 클래스로 작업하는 것처럼 당신이 당신의 코드를 작성하는 경우 것은 할 수있다.

그러면 프록시의 종류에 따라 클래스/인터페이스 구성원에 대한 일부 호출이 이 가로 채어이됩니다. 당신은 IntelliSense를이 없습니다 분명히 DynamicObject를 사용하여 동적 프록시를 구현하는, 그러나 이것은에 의해 dynamic 키워드의 성격에 의해 발생하고하지 않을 경우

[편집] 당신은 예를 들어, dynamic 키워드를 사용하는 경우 proxy 그 자체. 당신은 내가 사용하는 방법 DynamicProxy 클래스에 똑바로 대답을 찾고 있어요 how to implement a Proxy using a DynamicObject