我想使用反射类PropertyCondition(in assembly UIAutomationClient.dll)
创建一个对象。为了获得所需的类构造函数,我使用以下代码:
var assembly = AppDomain.CurrentDomain.GetAssemblies().First(x => x.FullName.Contains("AutomationClient"));
var propertyConditionType = assembly.DefinedTypes.First(x => x.Name == "PropertyCondition");
var automationElementType = assembly.DefinedTypes.First(x => x.Name == "AutomationElement");
var automationIdPropertyType = automationElementType.GetField("AutomationIdProperty").FieldType;
var constructor = propertyConditionType.GetConstructor(new Type[] { automationIdPropertyType, typeof(object) });
但是如何传递构造函数AutomationElement.AutomationIdProperty
?
谢谢。
答案 0 :(得分:0)
我相信automationId
is a string property。您需要的是找到接受constructor
的{{1}}:
strings
或者您可以使用Activator.CreateInstance Method:
CreateInstance(AppDomain,String,String,Boolean,BindingFlags,Binder,Object [],CultureInfo,Object [])
创建在其中指定名称的类型的实例 指定的远程域,使用命名的程序集和构造函数 最符合指定参数的。
答案 1 :(得分:0)
您缺少的步骤是一个简单的FieldInfo.GetValue
调用,以获取您必须传递给构造函数的值。我重新组织了你的代码:
var automationIdPropertyField = automationElementType.GetField("AutomationIdProperty");
var automationIdPropertyType = automationIdPropertyField.FieldType;
var automationIdPropertyValue = automationIdPropertyField.GetValue(null);
var constructor = propertyConditionType.GetConstructor(new[] { automationIdPropertyType, typeof(object) });
var obj = constructor.Invoke(new[] {automationIdPropertyValue, ...});