我正在为一个使用在 pre-.NET 2.0 CSLA 上建模的业务对象的客户端开发一个大型 Winforms 项目。升级到较新版本的 CSLA 不是一种选择。我的客户使用 CodeSmith 从数据库表中生成“基本”CSLA 风格的业务对象。所有业务对象都带有相应的“列表”类。
我遇到的问题之一是绑定到 Winforms 控件,因为生成的 List 类不实现ITypedList
. 客户告诉我,我可以扩展 List 类并自己实现它(他们提供了下面的代码片段),但是要处理很多业务对象,并且每次扩展 List 之一时都违反 DRY要实现的类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
只需返回 List 是其集合的项目的新实例:
public BusinessBase CreateContent()
{
return new SomeItem();
}
我一直在试图弄清楚是否有一种方法可以使用继承来避免在每个 List 类扩展中重复相同的代码,但还没有弄清楚如何在没有多重继承的情况下做到这一点,我们都知道不是反正可能。如果我创建一个ListExtensionBase
实现 的类ITypedList
,我的扩展类不能从两者继承,ListExtensionBase
并且在上面的示例中SomeItemListBase
,如果我使用泛型参数创建基类,我将无法直接访问所有基类成员。我无法控制如何SomeItemListBase
生成,并被指示按原样使用他们的业务对象框架。有什么办法可以ITypedList
在每个 List 扩展中使用相同的代码实现吗?我是否应该为每个实现使用相同的代码,还是应该ITypedList
每个扩展的实现都不同?