Unity5.x在WP8.1中无法使用Reflection API的解决方法

下班前随便写点,虽然花了不少时间但是最终得到的解决方法还是比较简单的。

第一种方法:使用WinRTLegacy.dll中的类。这个dll在生成的WP project中是自带的无需在unity工程中添加,但是这个带来的问题就是调试代码的时候不方便,因为你不放到项目中在VS的工程中就没有这个dll,对于调试代码和VS的自动补全功能影响很大。

废话不多说,用几个例子来说明用法:

#if NETFX_CORE
            foreach (PropertyInfo p_info in TypeExtensions.GetPublicInstanceProperties(type))
#else
            foreach (PropertyInfo p_info in type.GetProperties())
#endif

#if NETFX_CORE
        PropertyInfo[] proinfos = Unity.Partial.System.Type.GetProperties(srcObj.GetType(), m_bindingAttr);
#else
        PropertyInfo[] proinfos = srcObj.GetType().GetProperties(m_bindingAttr);
#endif

 TypeExtensions算是Unity对WP8.1的.NET Core中移除Reflection API的补充,方法算是比较全但是和原有的Type类中的方法比仍旧有很多不足,好在还有另一个类Unity.Partial.System.Type来补充。

#if NETFX_CORE
            foreach (FieldInfo f_info in Unity.Partial.System.Type.GetFields(type))
#else
            foreach (FieldInfo f_info in type.GetFields())
#endif

这两个类都是在同一个dll中的,用object Browser来看这个dll真心有点乱。用这两个类协作就可以解决大多数的Reflection API的问题。

第二种方法:使用类似GetRuntimeMethods这样的runtime方法

IEnumerable<MethodInfo> methods = type.GetRuntimeMethods();

同样在object Browser中可以发现有大量的方法名中带Runtime的方法,这些方法在WP8.1下有效。  

PS: 宏NETFX_CORE无需在unity工程中定义,在生成的WP project中自带。

 
 
posted @ 2016-04-12 18:12  鱼丸粗面  阅读(613)  评论(0编辑  收藏  举报