我有很多類反映了我的屏幕Repository from White/UIAutomation。 要使用存儲庫,我需要創建許多反映我的應用程序窗口屏幕的類。如何將className傳遞給獲取泛型類型作爲參數的方法C#
要創建我使用下面的方法的存儲庫:
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);
UPDATE1 夥計們,我不是坐在前面的代碼,但我會盡量讓我少的問題複雜化。
這是我在白庫,我想我發現了使用方法: 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顯示不用彷徨的。獲得<「類」型>。對不起,我不能更好地表達自己。請讓我有一個病人,因爲我不熟悉這個術語。
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>
可以得到的東西。 我希望你現在能理解我。
我很困惑,你正在嘗試做什麼。如果您可以縮小問題範圍並消除噪音,則可能會更清楚您需要做什麼。 – 2011-12-22 16:38:51
您可以使用反射。檢查此帖:http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-generic-method – Strillo 2011-12-22 16:39:24
Repository.Get如何使用泛型參數?人們會認爲它也會用Activator來創建對象。 –
2011-12-22 16:58:38