2009-11-16 30 views

Trả lời

7

Các thư viện BCL thường sử dụng thuộc tính TypeForwardedTo khi phiên bản khác nhau của khuôn khổ này di chuyển một loại giữa hội. Ví dụ, các đại biểu kiểu Func<> được di chuyển từ System.Core trong khung công tác 3.5 sang mscorlib trong khung công tác 4.0.

Bạn có thể xem thế giới thực sử dụng điều này bằng cách mở System.Core.dll từ 4,0 trong ildasm, nhấp đúp vào nút Manifest và tìm kiếm cho tất cả các dòng tương tự như sau

.class extern forwarder System.Func`1 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`2 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`3 
{ 
    .assembly extern mscorlib 
} 
+1

Tuyệt vời ví dụ. Bây giờ nếu chỉ có trình phân giải WCF sẽ tôn trọng 'TypeForwardedToAttribute' ;-p –

5

Từ msdn:

Ví dụ, giả sử một ứng dụng sử dụng lớp Ví dụ trong một assembly có tên là Utility.dll. Các nhà phát triển của Utility.dll có thể quyết định cấu trúc lại assembly, và trong quá trình này họ có thể di chuyển lớp Example đến một assembly khác. Nếu phiên bản cũ của Utility.dll được thay thế bằng phiên bản mới của Utility.dll và assembly đồng hành của nó, ứng dụng sử dụng lớp Example không thành công vì nó không thể định vị lớp Example trong phiên bản mới của Utility.dll.

Các nhà phát triển của Utility.dll có thể tránh điều này bằng cách chuyển tiếp các yêu cầu cho lớp Example, sử dụng thuộc tính TypeForwardedToAttribute. Nếu thuộc tính đã được áp dụng cho phiên bản mới của Utility.dll, các yêu cầu cho lớp Example được chuyển tiếp đến assembly đã chứa lớp đó. Ứng dụng hiện có tiếp tục hoạt động bình thường, không cần biên dịch lại.

0

Nói chung, dường như nó cho phép khả năng linh hoạt/tái cấu trúc trong các lớp thư viện của bạn. Tôi tìm thấy bài viết trên blog MSDN hữu ích. Trong bài viết này, một trong những ví dụ cho thấy một thư viện hiện có đang được chia thành 2 DLL riêng biệt, nơi ứng dụng sử dụng các thư viện sẽ không phải quan tâm đến một loại được chuyển sang một dll khác trong các phiên bản mới hơn của dll.

MSDN Blog Posting: Type Forwarding

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