У меня определен набор свойств, все значения хранятся в виде строк.
Мне нужно вернуть новый набор свойств, где значение каждого нового свойства может быть получено одним из 3 способов.
- Прямая копия определенного исходного значения.
- Значение по умолчанию.
- Результат некоторой логики, примененной к значениям 1 или более свойств источника.
Мой подход к этой проблеме заключался в создании интерфейса IMappable, определяющего метод GetValue (Dictionary SourceValues).
Для каждого результата я определил реализацию этого интерфейса с необходимой логикой в этом методе.
У меня есть фабричный метод, который возвращает IMappable на основе имени свойства:
private IMappable GetMapper(string LocalPropertyName)
{
char[] Chars = LocalPropertyName.ToCharArray();
Chars[0] = Char.ToUpper(Chars[0]);
string ClassName = new string(Chars) + "Mapping";
try
{
Assembly AssemblyInstance = Assembly.GetExecutingAssembly();
Type ClassType = AssemblyInstance.GetType("MyNamespace.Rules." + ClassName, false, true);
return (IMappable) System.Activator.CreateInstance(ClassType);
}
catch (System.Exception e)
{
//No Mapper exists
return new DefaultMapping(LocalPropertyName);
}
}
Это лучший способ решить эту проблему?
Это похоже на самый элегантный, но я беспокоюсь о быстродействии загрузки динамических классов.