为小部件集合实现通用接口?

时间:2018-07-03 17:21:54

标签: c# asp.net-mvc generics collections

我们正在尝试构建一个基本的报告系统,以供我们的分析团队使用。这是同一系统的第三或第四次迭代,但是我们正在合并和重写大部分后端逻辑,以使生成报告更容易。

我们遇到的一个问题是形成将由我们的报告小部件实现的界面,以将其推送到我们的ViewComponents

几个小部件的示例可能类似于以下内容:

public interface IWidget<T> 
{
    WidgetType WidgetType { get; set; }
    string WidgetName { get; set; }
    T ViewModel { get; set; }
}

public class ChartWidget : IWidget<Chart>
{
    public WidgetType WidgetType { get; private set; }
    public string WidgetName { get; set; }
    public Chart ViewModel { get; set; }

    public ChartWidget() {
        WidgetType = WidgetType.Chart;
    }
}

public class HeadlineBarWidget : IWidget<HeadlineBarData>
{
    public WidgetType WidgetType { get; private set; }
    public string WidgetName { get; set; }
    public HeadlineBarData ViewModel { get; set; }

    public ChartWidget() {
        WidgetType = WidgetType.HeadlineBar;
    }
}

但是报告将包含小部件的集合,并且该集合将需要在View中进行迭代,以获取适当的ViewComponent并为其提供所需的匹配模型。不幸的是,似乎大多数集合类型都需要确保类型安全,而我需要一种方法来使其更好。就目前而言,我们的IWidget对象将ViewModel定义为object,我认为这不是一个好习惯。

0 个答案:

没有答案