0

我正在尝试使用反射来为 Windows 8 Store App 使用带有 WebView 的代理。问题是,我无法确定 WebView 是否具有用于默认代理的私有方法或私有属性。

我知道android有一种使用反射来更新WebView的方法:WebView android proxy

但是,由于 Android 是开源的,因此更容易看到它在后端使用了哪些方法/对象。

.NET Windows Store API 有什么方法可以做到这一点吗?也许使用反射在运行时加载类。

4

2 回答 2

0

Visual Studio 可以显示一个类中声明的所有成员。将鼠标指针放在 yoru 代码中的类名上方,右键单击该名称,然后选择“Go to defeniton”命令。Visual Studio 将创建一个临时文件并在代码编辑器中打开它。不过,此文件将仅包含成员定义。

甚至可以浏览实现,但 Visual Studio 无法做到这一点。为此,您可以使用反射器工具。我不知道 Reflector 的免费软件模拟,除了ildasm

您也可以使用代码获取在类中声明的所有成员。Type 类具有GetMembers方法,允许您获取类的所有成员。使用 BindingFlags 指定需要获取私有成员:

MemberInfo[] privateMembers = typeof(MyClass).GetMembers(BindingFlags.Instance | BindingFlags.NotPublic);
于 2013-06-22T06:41:07.453 回答
0

使用 Windows 应用商店 API 无法设置绑定标志。但是我确实找到了一种解决方法,您需要创建一个新项目:可移植类库,它针对 .NET 4+ 和 Windows Store API。将此方法放在一个空类中:

public void ReflectionMagic(Object obj)
    {
        BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static;

        Type webview_type = obj.GetType();

        ConstructorInfo[] constructorinfo_arr = webview_type.GetConstructors(flags);
        MemberInfo[] memberinfo_arr = webview_type.GetDefaultMembers();
        EventInfo[] eventinfo_arr = webview_type.GetEvents(flags);
        FieldInfo[] fieldinfo_arr = webview_type.GetFields(flags);
        Type[] interfaces_arr = webview_type.GetInterfaces();
        MemberInfo[] membersinfo_arr = webview_type.GetMembers(flags);
        MethodInfo[] methodinfo_arr = webview_type.GetMethods(flags);
        Type[] nestedtypes_arr = webview_type.GetNestedTypes(flags);
        PropertyInfo[] propertyinfo_arr = webview_type.GetProperties(flags);

        Type webview_interface_type = obj.GetType().GetInterfaces()[5].GetType();

        ConstructorInfo[] constructorinfo_arr2 = webview_interface_type.GetConstructors(flags);
        MemberInfo[] memberinfo_arr2 = webview_interface_type.GetDefaultMembers();
        EventInfo[] eventinfo_arr2 = webview_interface_type.GetEvents(flags);
        FieldInfo[] fieldinfo_arr2 = webview_interface_type.GetFields(flags);
        Type[] interfaces_arr2 = webview_interface_type.GetInterfaces();
        MemberInfo[] membersinfo_arr2 = webview_interface_type.GetMembers(flags);
        MethodInfo[] methodinfo_arr2 = webview_interface_type.GetMethods(flags);
        Type[] nestedtypes_arr2 = webview_interface_type.GetNestedTypes(flags);
        PropertyInfo[] propertyinfo_arr2 = webview_interface_type.GetProperties(flags);

    }

从您的原始项目中,添加对此可移植类库的引用,实例化该类并使用您想要的对象调用方法:ReflectionMagic。

您应该能够通过单步执行调用 ReflectionMagic 的代码行来单步执行可移植类库代码。(提示:F11 - 进入)

注意:Visual Studio 2012 Express 无法创建可移植类库。我使用了 Visual Studio 2012 Ultimate 的试用版

于 2013-07-11T15:16:48.683 回答