2016-03-16 2 views
0

Есть ли способ для RunCompile() a Шаблон двигателя бритвы без объявления typeof(someType)?шаблон синтаксического анализатора бритвы без определенного типа

Я хочу, чтобы избежать нескольких методов, как эти:

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; 
    } 

Как я могу объединить эти два метода в один более общий метод, так что я все еще могу назвать его с различными типами? Благодаря!

ответ

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); 
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> части) только, чтобы сделать это ясно, что происходит, но это, конечно, излишнее, поскольку компилятор может сделать вывод, что из параметра модели вызов метода.

Смежные вопросы