Portable Class Library Reflection

2019-06-17 08:57发布

I am currently trying to convert a Xamarin.iOS app library to a PCL (Profile 78). I have this code that will not compile:

 public static void RegisterAllCommandHandlers(IEnumerable<Assembly> assemblies) {
            // Get all types that are concrete classes which implement ICommandHandler
            var commandHandlerOpenGenericType = typeof(ICommandHandler<>);
            var types = new List<Type>();
            foreach (var assembly in assemblies) {
                types.AddRange(assembly.GetTypes()
                      .Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == commandHandlerOpenGenericType)));
            }
    }

Here is an image of the compiler errors: enter image description here

How can I do the same thing with the new reflection API?

1条回答
何必那么认真
2楼-- · 2019-06-17 09:20

This is due to the type/typeinfo split. See Evolving the Reflection API.

Try this code:

assembly.DefinedTypes
    .Where(x => x.IsClass && !x.IsAbstract && x.ImplementedInterfaces
        .Any(i => i.GetTypeInfo().IsGenericType && i.GetGenericTypeDefinition() == commandHandlerOpenGenericType))
    .Select(x => x.AsType())
查看更多
登录 后发表回答