我有很多类反映了我的屏幕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