私はWhite/UIAutomationから自分のスクリーンリポジトリを反映するクラスをたくさん持っています。 リポジトリを使用するには、自分のアプリケーションウィンドウの画面を反映するたくさんのクラスを作成する必要があります。Cでパラメータとしてジェネリック型を取得するメソッドにclassNameを渡すには
var repoReport = repository.Get<MyClassRepresentingWindow>("WindowTitle",
InitializeOption.WithCache);
それは私が準備クラスがあるジェネリック型を渡す:
は、私は次のメソッドを使用してリポジトリを作成します。私が何をしたいかは、そのメソッドに渡す辞書(stringClassName、文字列WINDOWTITLE)、または任意の地図を作成することです。 問題は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);
アップデート1 みんな、私は、コードの前に座っていないが、私は私の質問はあまり複雑にするために頑張ります。私はVSは>に.get <「クラス」タイプとに.getを表示覚えたよう 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;
}
:
これは私が私が使用して考えるホワイトリポジトリで見つかった方法です。すみません、私は自分自身をよく表現できません。私はこの用語に慣れていないので、患者さんは私と一緒にいてください。終わりにアップデート2
は、私はこのような何かを取得したい:
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>
が得ることができるものを提供したいです。 私はあなたが今私を理解できることを願っています。
あなたがしようとしていることについては混乱しています。問題を絞って騒音を取り除くことができれば、何をする必要があるのかがはっきりするかもしれません。 –
Reflectionを使用できます。この記事をチェックしてください:http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-generic-method – Strillo
Repository.Getはどのようにジェネリックパラメータで動作していますか? Activatorを使ってオブジェクトを作成すると思う人もいます。 –