简介:我正在创建一个 MVC 应用程序,我需要在其中显示各种类型的文档,其中一些文档比其他文档包含更多的作者信息。
我想做的是:我的方法是拥有一个通用的“查看文档”视图,它以传递给它的对象的形状/类型所指示的格式动态显示文档。
示例:一个简单的文档将被加载到 SimpleDocumentViewModel 中,并按原样显示。但是,我想将更大类型的文档加载到 ExtendedDocumentViewModel 中,并附带有关文档和作者的附加信息。然后,视图将根据它接收到的对象显示适当的数据。
我现在所处的位置:在这种情况下,我创建了以下接口和类,但我对如何在派生类中返回/识别更具体的返回类型感到困惑。
abstract class BaseDocumentViewModel : DocumentViewModel, IDocumentViewModel
{
public int DocumentId { get; set; }
public string Body { get; set; }
public IAuthorViewModel Author { get; set; }
}
class SimpleDocumentViewModel : BaseDocumentViewModel
{
}
class ExtendedDocumentViewModel : BaseDocumentViewModel
{
public new IAuthorExtendedViewModel Author { get; set; }
}
interface IAuthorViewModel
{
int PersonId { get; set; }
string Name { get; set; }
}
interface IAuthorExtendedViewModel : IAuthorViewModel
{
int ExtraData { get; set; }
int MoreExtraData { get; set; }
}
问题:所以我的问题是;如何最好地从完全实现的类中获取特定类型,或者我是否需要返回基本类型并在视图中全部查询?或者我是不是疯了,需要回到绘图板?
编辑:
我知道c# 不支持返回类型 covarience,但希望可能有另一种返回/识别派生类型的方法,这样我就不必在视图中全部查询它们。
我目前的解决方案是始终返回基本类型,并为每个具体类型提供一个单独的视图,该视图只是将每个对象转换为正确的类型,只查询那些可能不同的类型。也许这就是最好的解决方案了,但感觉很不雅观。
九州编程
相关分类