获取Windows 8.1 Universal app的引用程序集中的所有类

时间:2014-11-07 12:49:01

标签: c# .net windows-8.1 windows-phone-8.1 .net-assembly

我有一个项目,我正在从Windows Phone 8迁移到通用Windows 8.1。

方案

在解决方案中,我有多个程序集,它们实现了在公共程序集中定义的接口(但不是每个接口都有,但它们各不相同),但是所有接口都实现或扩展了接口IResolver

我在我的" main"中使用了反射。 project / assembly通过向其传递该程序集的IResolver(接口)实现的实例来注册引用程序集中的类。

代码

using System.Reflection;
...
public void Register(IResolver resolver)
{
   foreach (Type classType in resolver.GetType().Assembly.GetTypes())
   {
      // Register the class type with the ioc container
   }
}

它就像一个魅力: - )

问题

System.Type不包含Assembly的定义,并且没有可以找到接受类型Assembly的第一个参数的扩展方法System.Type

Type.Assembly的文档中指出:

受以下版本支持:Windows Phone 8.1,Windows Phone Silverlight 8.1,Windows Phone Silverlight 8

因此在Windows 8.1中不支持,但即使它在Windows Phone 8.1项目中,仍然表示不包含Assembly的定义。

如果这还不够,那么班级Assemly就不会实施方法GetTypes()

问题

如何从界面实例中获取Universal App的引用程序集中定义的所有类?

有任何建议或替代方案吗?

不能工作的事情

Assembly.GetExecutingAssembly()

错误:System.Reflection.Assembly不包含GetExecutingAssembly

的定义

1 个答案:

答案 0 :(得分:4)

嗯,这很烦人......

GetType().GetTypeInfo()

public void Register(IResolver resolver)
{
   foreach (Type classType in resolver.GetType().GetTypeInfo().Assembly.GetExportedTypes())
   {
      // Register the class type with the ioc container
   }
}