Mam zestaw klas, każdy z nich jest inny strategy do wykonania tej samej pracy.Utwórz obiekt, znając tylko nazwę klasy?
namespace BigCorp.SuperApp
{
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
}
Wybór strategii do użycia jest konfigurowalny. Chcę skonfigurować tylko nazwę klasy "ClassB" zamiast pełnej nazwy typu "BigCorp.SuperApp.ClassB" w pliku app.config.
<appConfig>
<SuperAppConfig>
<Handler name="ClassB" />
</SuperAppConfig>
</appConfig>
Jednak wywołania refleksji nie dlatego, że oczekują pełnej nazwy typu, szczególnie
Type t = Type.GetType("ClassB"); // results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; // fails
Jak mogę uzyskać to do pracy podczas konfigurowania tylko nazwę klasy? Łączenie przestrzeni nazw z nazwą klasy dla pełnej nazwy typu? Czy istnieje inne wezwanie do refleksji, które działa?
Jeśli uważasz, że jest to bezużyteczne i powinienem oczekiwać, że konfiguracja zawiera pełną nazwę typu, jestem otwarty na to rozwiązanie! Podaj uzasadnienie, aby mnie przekonać.
(nie będzie ładowania typ spoza tego montażu/nazw)
Mogłem po prostu użyć kontenera IoC, radzić sobie z długimi nazwami i zrobić dla mnie tworzenie obiektów! –