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:
How can I do the same thing with the new reflection API?
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())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With