Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Portable Class Library Reflection

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?

like image 720
Chris Kooken Avatar asked Dec 11 '13 16:12

Chris Kooken


1 Answers

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())
like image 110
TheESJ Avatar answered Oct 18 '22 10:10

TheESJ