C # Usando Activator.CreateInstance
ntem fiz uma pergunta sobre o uso de reflexão ou padrão de estratégia para chamar métodos dinamicament
No entanto, desde então, decidi alterar os métodos em classes individuais que implementam uma interface comum. O motivo é que cada classe, embora possua algumas semelhanças, também executa certos métodos exclusivos dessa class
Eu estava usando uma estratégia como tal:
switch (method)
{
case "Pivot":
return new Pivot(originalData);
case "GroupBy":
return new GroupBy(originalData);
case "Standard deviation":
return new StandardDeviation(originalData);
case "% phospho PRAS Protein":
return new PhosphoPRASPercentage(originalData);
case "AveragePPPperTreatment":
return new AveragePPPperTreatment(originalData);
case "AvgPPPNControl":
return new AvgPPPNControl(originalData);
case "PercentageInhibition":
return new PercentageInhibition(originalData);
default:
throw new Exception("ERROR: Method " + method + " does not exist.");
}
o entanto, à medida que o número de classes em potencial aumenta, precisarei continuar adicionando novas, quebrando assim a regra de fechado para modificaçã
Em vez disso, usei uma solução como tal:
var test = Activator.CreateInstance(null, "MBDDXDataViews."+ _class);
ICalculation instance = (ICalculation)test.Unwrap();
return instance;
Efetivamente, o parâmetro _class é o nome da classe transmitida em tempo de execução. Essa é uma maneira comum de fazer isso? Haverá algum problema de desempenho com isso?
Sou bastante novo na reflexão, por isso seu conselho seria bem-vind