Перед тем, как запускать и использовать среду внедрения зависимостей, прочтите ее критику. знак равно
я задал вопрос об использовании рефлексии или шаблона стратегии для динамического вызова методов.
Однако с тех пор я решил изменить методы на отдельные классы, которые реализуют общий интерфейс. Причина в том, что каждый класс, имея некоторое сходство, также выполняет определенные методы, уникальные для этого класса.
Я использовал стратегию как таковую:
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.");
}
Однако по мере роста числа потенциальных классов мне нужно будет добавлять новые, нарушая тем самым правило закрытых для модификации.
Вместо этого я использовал решение как таковое:
var test = Activator.CreateInstance(null, "MBDDXDataViews."+ _class);
ICalculation instance = (ICalculation)test.Unwrap();
return instance;
Фактически, параметр _class - это имя класса, переданного во время выполнения. Это обычный способ сделать это, будут ли проблемы с производительностью?
Я довольно новичок в размышлениях, поэтому ваш совет будет приветствоваться.