我当时正在研究使用DynamicProxy类,并且对这个概念还很陌生。在我走这条路之前,我想知道这些类在IntelliSense和类型安全性方面的表现如何?

我只是害怕使用Castle DynamicProxy之类的东西(或其他一些东西),并且在完成所有设置后发现使用我的对象没有提供IntelliSense或类型安全性。谁能对此有所启示?

最佳答案

我正在寻找有关DynamicProxy类如何的直接答案
  使用,以及它们是否支持智能感知,如果支持,如何?


好了,在解释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类,ProxyGenerator只需创建CustomerProxy类的实例,但将其作为Customer类型返回。基本上和Customer customer = new CustomerProxy();是一样的。 “动态”部分实际上与.NET dynamic关键字没有任何关系,而应显示为“运行时”,因为这仅表示代理类是在运行时(应用程序运行时)生成的,而不是在编译时。哦,如果您想知道它是如何做到的,它会使用System.Reflection.Emit



那是DynamicProxy的简单版本。创建这些代理类时,不同的框架提供不同的功能。例如,在Castle Windsor的DynamicProxy中,您可以创建Mixins并将其他接口应用于这些代理类-也就是说,即使public class CustomerProxy : Customer, ISomeInterface { ... }类本身未实现,您生成的代理类也可能看起来像这样:Customer ISomeInterface。对于Castle的DynamicProxy(http://kozmic.net/dynamic-proxy-tutorial/),这是一个非常好的资源。它介绍了各种功能以及这些功能的用例。

10-04 12:31