在没有声明RunCompile()
的情况下,有没有办法 typeof(someType)
Razor Engine模板?
我想避免使用多种方法:
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;
}
如何将这两种方法组合成一个更通用的方法,以便我仍然可以用不同的类型调用它?谢谢!
答案 0 :(得分:1)
您可以制作如下通用方法:
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);
答案 1 :(得分:0)
这个怎么样:
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>
部分)中保留了泛型参数,只是为了让你清楚地知道发生了什么,但这当然是多余的,因为编译器可以从模型参数中推断出方法调用。