【问题标题】:Castle.DynamicProxy2 and Adding a Property at Run TimeCastle.DynamicProxy2 并在运行时添加属性
【发布时间】:2010-11-13 11:22:10
【问题描述】:

我正在使用 Castle.DynamicProxy2,我正在实例化我的代理:

private static T GenerateProxy()
{   
    ArrayList addtlInterfaces = new ArrayList();

    addtlInterfaces.Add(typeof (INotifyPropertyChanged));
    addtlInterfaces.Add(typeof (EntityStatus));

    object entityProxy = ProxyGenerator.CreateClassProxy(typeof(T), 
                                                          addtlInterfaces.ToArray(typeof(Type)) as Type[],
                                                          ProxyGenerationOptions.Default,
                                                          new IInterceptor[] { new LazyInterceptor() });


    return (T)entityProxy;
}

我的 IEntityStatus 界面如下所示:

public interface  IEntityStatus
{
    bool IsDirty
    { get; set;}
}

我需要能够在运行时使用该属性,以便当我的 DTO 发生属性更改事件时,该事件可以将 DTO 设置为脏。然而,因为它是一个接口并且没有明确的实现,所以我不知道如何做到这一点。为 get 和 set 方法创建一个委托是我想避免的一个选项。那么还有其他方法可以实现我想要实现的目标吗?

我意识到我可以设置所有活动 DTO 的集合,并且当属性更改事件在其中一个 DTO 上触发时,我可以更新该集合以显示此特定 DTO 是脏的,但我真的很想获得这些信息成为代理 DTO 的一部分,以简化语法。

期待回复!

【问题讨论】:

    标签: c# c#-2.0 castle-dynamicproxy


    【解决方案1】:

    我不知道您如何处理 INotifyPropertyChanged,但我会为这两个接口使用 mixin,其中一个订阅另一个事件。这是一个可行的解决方案吗?

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2013-03-27
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多