2013-12-11 18 views
7

Tôi hiện đang cố gắng chuyển đổi thư viện ứng dụng Xamarin.iOS thành PCL (Tiểu sử 78). Tôi có mã này sẽ không biên dịch:Phản hồi thư viện lớp học di động

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))); 
      } 
    } 

Dưới đây là hình ảnh của các lỗi biên dịch: enter image description here

Làm thế nào tôi có thể làm điều tương tự với các API phản chiếu mới?

+0

Những nền tảng nào bạn nhắm mục tiêu trong PCL của bạn? – Markus

+0

@Markus Profile 78 (Xamarin.IOS, Xamarin.Android, .net 4.5, cửa sổ cửa sổ, cửa sổ điện thoại 8 –

+0

Lỗi trình biên dịch bạn nhận được là gì? (Hình ảnh không hiển thị lỗi trình biên dịch) – elgonzo

Trả lời

16

Điều này là do việc chia loại/typeinfo. Xem Evolving the Reflection API.

Hãy thử mã này:

assembly.DefinedTypes 
    .Where(x => x.IsClass && !x.IsAbstract && x.ImplementedInterfaces 
     .Any(i => i.GetTypeInfo().IsGenericType && i.GetGenericTypeDefinition() == commandHandlerOpenGenericType)) 
    .Select(x => x.AsType()) 
+0

Cảm ơn bạn rất nhiều! –

Các vấn đề liên quan