没有特定类型的剃刀引擎模板解析

razor engine template parse without specific type

有没有办法在不声明 typeof(someType) 的情况下 RunCompile() Razor 引擎模板?

我想避免使用像这样的多种方法:

    public static string EvalueateLineChartModelTemplate(d3LineCharts.LineChartModel model, string cssResourceName, string tempKey)
    {
        string template = StreamEmbeddedResource(cssResourceName);
        string result = Engine.Razor.RunCompile(template, tempKey, typeof(d3LineCharts.LineChartModel), model);
        return result;
    }

    public static string EvalueateAreaChartModelTemplate(d3AreaCharts.AreaChartModel model, string cssResourceName, string tempKey)
    {
        string template = StreamEmbeddedResource(cssResourceName);
        string result = Engine.Razor.RunCompile(template, tempKey, typeof(d3AreaCharts.AreaChartModel), model);
        return result;
    }

如何将这两个方法组合成一个更通用的方法,以便我仍然可以用不同的类型调用它?谢谢!

你可以像这样创建一个通用方法:

public static string EvaluateTemplate<T>(T model, string cssResourceName, string tempKey)
{
    string template = StreamEmbeddedResource(cssResourceName);
    string result = Engine.Razor.RunCompile(template, tempKey, typeof(T), model);
    return result;
}

然后您可以像调用特定类型版本一样调用泛型方法:

d3LineCharts.LineChartModel lineChartModel = new d3LineCharts.LineChartModel();
string result = EvaluateTemplate(lineChartModel, cssResourceName, tempKey);

这个怎么样:

public static string EvalueateChartModelTemplate<T>(T model, string cssResourceName, string tempKey)
{
    string template = StreamEmbeddedResource(cssResourceName);
    string result = Engine.Razor.RunCompile(template, tempKey, typeof(T), model);
    return result;
}

您的电话将如下所示:

var result1 = EvalueateChartModelTemplate<d3LineCharts.LineChartModel>(lineChartModel, lineChartResourceName, lineChartKey);
var result2 = EvalueateChartModelTemplate<d3LineCharts.AreaChartModel>(areaChartModel, areaChartResourceName, areaChartKey);

我在方法调用(<d3XXXCharts.XXXChartModel> 部分)中保留了通用参数只是为了让您清楚发生了什么,但这当然是多余的,因为编译器可以从模型中推断出方法调用的参数。