У меня есть много классов, отражающих мой экранный репозиторий от White / UIAutomation.
Чтобы использовать репозиторий, мне нужно создать множество классов, отражающих экраны окон моего приложения.
Для создания хранилища я использую следующий метод:
var repoReport = repository.Get<MyClassRepresentingWindow>("WindowTitle",
InitializeOption.WithCache);
он передает общий тип, подготовленный для класса I.
Я хочу создать словарь (stringClassName, string windowTitle) или любую карту для передачи этому методу.
Проблема не может передать className как в Java ClassForName.
Я пытался System.Activator
, но безуспешно.
Object configObj = System.Activator.CreateInstance(c);
Type c = System.Type.GetType("Namespace.MyClassRepresentingWIndow");
var myClass = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("Namespace.MyClassRepresentingWIndow");
Type type = assembly.GetType("Namespace.MyClassRepresentingWIndow");
object obj = Activator.CreateInstance(type);
var repoReport = repository.Get<c>("WindowTitle",
InitializeOption.WithCache);
var repoReport = repository.Get<c.Name>("WindowTitle",
InitializeOption.WithCache);
Update1
Ребята, я не сижу перед кодом, но постараюсь сделать мой вопрос менее сложным.
Это метод, который я нашел в репозитории White, который, я думаю, я использую:
https://github.com/petmongrels/white/blob/itemsmap/Components/Repository/Source/ScreenRepository.cs
public virtual T Get<T>(string title, InitializeOption option) where T : AppScreen
{
ClearClosedScreens();
AppScreen screen;
var repositoryCacheKey = new ScreenRepositoryCacheKey(title, typeof (T));
if (!screenCache.TryGetValue(repositoryCacheKey, out screen))
{
Window window = applicationSession.Application.GetWindow(title, IdentifiedOption<T>(option));
screen = GetScreen<T>(window);
screenCache.Add(repositoryCacheKey, screen);
}
if (screen != null)
sessionReport.Next(typeof (T));
return (T) screen;
}
Насколько я помню, VS отображал .Get as .Get <тип "class">. Извините, я не могу выразить себя лучше. Пожалуйста, возьмите с собой пациента, потому что я не знаком с этой терминологией.
Update2
В конце я хочу получить что-то вроде этого:
var repoReport1 = repository.Get<MyClassRepresentingWindow1>("WindowTitle", InitializeOption.WithCache);
var repoReport1 = repository.Get<MyClassRepresentingWindow2>("WindowTitle", InitializeOption.WithCache);
var repoReport1 = repository.Get<MyClassRepresentingWindow3>("WindowTitle", InitializeOption.WithCache);
И у меня есть код MyClassRepresentingWindow{1,2,3}
. Я просто не знаю, как передать имя класса в метод Get. На входе у меня есть строковое имя этого класса. На выходе я хочу предоставить что-то, что может получить этот метод .Get<T>
.
Надеюсь, теперь вы меня понимаете.