我有一个项目,我正在从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
答案 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
}
}