我正在使用以.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
實現應該不同?