2009-07-23 85 views
1

我使用Castle.DynamicProxy2,我實例化我的代理這樣: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的一部分,用於純粹的句法緩和。

期待回覆!

回答

2

我不知道你如何處理INotifyPropertyChanged,但我會使用mixin的兩個接口,有一個訂閱他人的事件。這是一個可行的解決方案嗎?

相關問題