如何从使用反射API的可移植类库中定位Silverlight?

时间:2013-02-03 17:11:45

标签: reflection silverlight-5.0 portable-class-library

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

var fields = myType.GetTypeInfo().DeclaredFields;

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

  1. 不要从PCL定位SL5,因此我需要为Silverlight保留一个单独的库。
  2. 从使用反射的PCL代码中提取,因此PCL需要在启动时解决此依赖关系。
  3. 在运行时做一些聪明的事情,因此PCL可以检测出可用的方法并调用适当的方法。
  4. 选项1没问题,但我宁愿找到维护重复库的替代方法。 如果我必须提取大量功能,那么选项2就可以了,所以值得引入一个bootstraper。当它是几行不编译时,拖动DI / IoC是愚蠢的。

    所以我在考虑选项3而没有明确的理解,如果有可能的话。反思是我的朋友,但这是我想要克服的反映API不匹配。

    赞赏建议/经验分享。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-1)

这个怎么样?

Reflection.Assembly = Reflection.IntrospectionExtensions.GetTypeInfo(GetType(*anyTypeInAssembly*)).Assembly