2011-03-31 46 views
0

我正在使用以.NET.NET 2.0爲模型的業務對象的客戶端的大型Winforms項目。升級到較新版本的CSLA不是一種選擇。我的客戶使用CodeSmith從數據庫表中生成「基礎」CSLA樣式的業務對象。所有業務對象都帶有相應的「List」類。CSLA,BusinessCollectionBase和ITypedList

我遇到的問題之一是綁定到Winforms控件,因爲生成的List類不實現ITypedList。我已經告訴我可以擴展List類並實現它自己(他們提供下面的代碼段),但我處理了不少業務對象,我每次延長列表中的一個時間我違反乾的客戶端類實施ITypedList。我使用的是在每一個擴展List類下面的代碼:

public class SomeItemListExtended : SomeItemListBase, ITypedList 
{ 
    public string GetListName(PropertyDescriptor[] listAccessors) 
    { 
     return null; 
    } 

    public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) 
    { 
     return TypeDescriptor.GetProperties(CreateContent().GetType()); 
    } 
} 

CreateContent簡單地返回該項目的新實例,該清單是一個集合:

public BusinessBase CreateContent() 
{ 
    return new SomeItem(); 
} 

我一直在努力找出是否有一種方法,我可以用繼承來避免在每個List類擴展重複相同的代碼,但還沒有想出如何做到這一點沒有多重繼承,這是我們都知道是不可能的呢。如果我創建一個ListExtensionBase類,它實現ITypedList,我的擴展類不能從兩個ListExtensionBase繼承,並在上面的例子中,SomeItemListBase。如果我使用泛型參數創建基類,那麼我將失去對所有基類成員的直接訪問權限。我無法控制如何生成SomeItemListBase,並且已被指示按原樣使用其業務對象框架。有什麼辦法可以在每個List擴展中使用相同的代碼來實現ITypedList?我是否應該爲每個實現使用相同的代碼,或者每個擴展的ITypedList實現應該不同?

回答

0

而不能修改基類,我想你堅持在每個列表類分別實現ITypedList