代码之家  ›  专栏  ›  技术社区  ›  joshlrogers

castle.dynamicProxy2并在运行时添加属性

  •  1
  • joshlrogers  · 技术社区  · 15 年前

    我正在使用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-and-set方法创建委托。那么,有没有其他方法来实现我期望实现的目标呢?

    我意识到我可以设置所有活动DTO的集合,当某个DTO上触发属性更改事件时,我可以更新该集合以显示该特定DTO是脏的,但为了纯粹的语法上的方便,我真的希望此信息成为代理DTO的一部分。

    期待回应!

    1 回复  |  直到 15 年前
        1
  •  2
  •   Krzysztof Kozmic    15 年前

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