У меня есть набор классов, каждый из которых имеет свою стратегию для выполнения одной и той же работы.
namespace BigCorp.SuperApp
{
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
}
Выбор используемой стратегии настраивается. Я хочу настроить только имя класса «ClassB» вместо полного имени типа «BigCorp.SuperApp.ClassB» в файле app.config.
<appConfig>
<SuperAppConfig>
<Handler name="ClassB" />
</SuperAppConfig>
</appConfig>
Однако вызовы рефлексии не выполняются, потому что они ожидают полное имя типа, в частности
Type t = Type.GetType("ClassB"); // results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; // fails
Как я могу заставить это работать при настройке только имени класса? Объединить пространство имен с именем класса для полного имени типа? Есть еще один вызов рефлексии, который работает?
Если вы считаете, что это бесполезно, и я должен ожидать, что конфигурация будет содержать полное имя типа, я открыт для этого решения! Просто предоставьте обоснование, чтобы убедить меня.
(я не буду загружать тип извне этой сборки / пространства имен)