Castle.DynamicProxy2并在运行时添加属性

时间:2009-07-23 16:59:21

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

我正在使用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的一部分,简化语法。

期待回复!

1 个答案:

答案 0 :(得分:2)

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