White/UIAutomation の画面リポジトリを反映したクラスがたくさんあります。リポジトリを使用するには、アプリケーション ウィンドウの画面を反映する多くのクラスを作成する必要があります。
リポジトリを作成するには、次の方法を使用します。
var repoReport = repository.Get<MyClassRepresentingWindow>("WindowTitle",
InitializeOption.WithCache);
私が用意したクラスであるジェネリック型を渡します。
私がやりたいことは、Dictionary(stringClassName, string windowTitle) またはそのメソッドに渡す任意の Map を作成することです。問題は、Java ClassForName のように className を渡すことができないことです。
私は試し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 を .Get<"class" type> として表示しました。うまく表現できなくてごめんなさい。私はこの用語に精通していないので、私と一緒に患者を迎えてください。
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>
ます。あなたが今私を理解してくれることを願っています。