2011-09-30 29 views
10

Tôi đang cố gắng sử dụng MEF trong Windows 8.Bắt một loại hội trong Windows 8

Để xây dựng của tôi AssemblyCatalog cho container, tôi cần một tham chiếu đến assembly. Trong quá khứ, tôi sẽ chỉ làm điều này:

var catalog = new AssemblyCatalog(typeof(App).Assembly); 

một cách bí ẩn, các Assembly bất động sản không còn tồn tại trên đối tượng Type. Bất kỳ ai biết về một công việc tốt xung quanh? Có cách nào khác để lắp ráp không? Tôi có thể tải nó bằng cách sử dụng Assembly.Load, nhưng tôi sẽ cần tên của hội đồng. Tôi cũng không thể lấy nó từ loại đó.

Bạn đang sử dụng số DirectoryCatalog có thể thay thế? Tôi không thích ý tưởng, nhưng tôi sẽ làm những gì tôi cần.

+0

@harold: Cảm ơn bạn đã làm rõ. –

Trả lời

16
using System.Reflection; 

Sử dụng type.GetTypeInfo().Assembly để thay thế.

+0

Xem thêm http://stackoverflow.com/questions/7467678/list-of-assemblies-in-the-net-for-windows-8-profile –

+1

Intellisense không chọn GetTypeInfo() trên typeof (App). Không chắc chắn thỏa thuận là gì. –

+2

Trích dẫn từ tài liệu xóa nó lên: "Bạn có thể lấy đối tượng TypeInfo bằng cách gọi phương thức System.Reflection.IntrospectionExtensions.GetTypeInfo (System.Type), là một phương thức mở rộng cho Type." –

6

Tìm câu trả lời sau khi tìm hiểu một số tài liệu về xây dựng các ứng dụng kiểu metro.

http://msdn.microsoft.com/en-us/library/windows/apps/br230302%28v=VS.85%29.aspx#reflection

Các khía cạnh phản ánh của lớp Type đã được chuyển đến một đối tượng mới có tên gọi System.Reflection.TypeInfo. Bạn có thể lấy một phiên bản của lớp này bằng cách gọi type.GetTypeInfo().

Vì vậy, để có được Hội đồng: typeof(App).GetTypeInfo().Assembly.

Yêu cầu using System.Reflection;