1

我有一个针对 WSA、NET45 和 WP8 的可移植类库,我也想针对 SL5。愚蠢的是 99% 的库代码都符合 SL 标准,但有几个地方我调用反射 API 来检索类型属性或字段:

var fields = myType.GetTypeInfo().DeclaredFields;

不幸的是 GetTypeInfo 在 SL5 中不可用,因此上述代码无法编译。所以我基本上有选择:

  1. 不要从 PCL 定位 SL5,因此我需要为 Silverlight 保留一个单独的库。
  2. 从使用反射的 PCL 代码中提取,因此 PCL 将需要解决这种对启动的依赖。
  3. 在运行时做一些聪明的事情,这样 PCL 可以检测哪些方法可用并调用适当的方法。

选项 1 没问题,但我宁愿找到维护重复库的替代方法。如果我必须提取大量功能,那么选项 2 就可以了,因此值得引入一个引导程序。当有几行无法编译时,拖动 DI/IoC 是愚蠢的。

因此,我正在考虑选项 3,但没有清楚地了解它是否可能。反射是我的朋友,但这是我试图克服的反射 API 不匹配。

建议/经验分享表示赞赏。

4

2 回答 2

1

在玩过代码之后,我发现我可以简单地使用旧的检索字段的方法:

var fields = myType.GetFields(BindingFlags.Public | BindingFlags.Static);

我的印象是,由于反射 API 更改,此语法在 PCL 中不可用,但实际上恰恰相反:使用此语法,我可以同时针对 WSA、WP8 和 SL5 的 .NET 4.0.3、.NET 4.5、.NET .

于 2013-02-03T17:50:08.927 回答
-1

这个怎么样?

Reflection.Assembly = Reflection.IntrospectionExtensions.GetTypeInfo(GetType(*anyTypeInAssembly*)).Assembly
于 2015-04-13T07:36:07.370 回答