Chúng ta đều biết rằng assembly có thể được truy vấn cho các thuộc tính bằng phương thức GetCustomAttributes. Tôi muốn sử dụng điều này để xác định một mô-đun mở rộng cho ứng dụng của tôi. Tuy nhiên, để tránh tải mỗi lắp ráp Tôi thích một cách tiếp cận phòng thủ:Cách lấy các thuộc tính tùy chỉnh từ một assembly không thực sự được nạp
sử dụng Assembly.ReflectionOnlyLoadFrom để biết thêm chi tiết về một hội đồng (? Có nó ModuleAttribute của tôi)
nếu ModuleAttribute được tìm thấy, tôi cuối cùng sẽ được tải nó bằng cách sử Assembly.LoadFrom
Đáng tiếc là dường như không có cách nào để có được những thuộc tính từ một assembly, được nạp vào bối cảnh phản ánh chỉ:
myAssembly.GetCustomAttributes(typeof(ModuleAttribute), false)
không thành công với một InvalidOperationException ("Thật là bất hợp pháp để phản ánh về các thuộc tính tùy chỉnh của một Loại nạp qua ReflectionOnlyGetType") và
CustomAttributeData.GetCustomAttributes(myAssembly)
không thành công với ReflectionTypeLoadException vì lắp ráp phụ thuộc không được nạp.
Vậy làm thế nào để có được những thuộc tính mà không
- gây ô nhiễm miền ứng dụng của tôi với các loại vô dụng (có thể có hại) bằng cách gọi Assembly.LoadFrom
- nhu cầu tải tất cả các assembly tham chiếu
- nhu cầu riêng biệt các miền ứng dụng (đã cho nó một thử ngắn, có mùi giống như nhiều hơn PITA)
?
Không thích phương pháp này, vì nó dựa trên siêu dữ liệu bổ sung. Đây không phải là tốt hơn nhiều so với mã hóa cứng trong đó thư mục một hội đồng với tên tập tin cố định phải được đặt. –
Nó dựa trên siêu dữ liệu được lưu trong bộ nhớ cache, không phụ thuộc vào. Bạn trích xuất siêu dữ liệu từ hội đồng và lưu trữ chúng trong bộ nhớ cache của bạn (tệp XML hoặc bất kỳ thứ gì). Nó là nhanh hơn và tốt hơn sau đó đọc hội đồng. Ngoài ra, cách tiếp cận này có thể mở rộng hơn nhiều vì sau một thời gian bạn sẽ kết thúc với một thứ gì đó, bạn sẽ không thể trích xuất từ assembly mà không tải nó. –
Có thể tôi không giúp bạn, nhưng ai đang tạo bộ đệm siêu dữ liệu? Nó yêu cầu người sáng tạo cung cấp mô tả siêu dữ liệu hợp lệ hoặc tôi để tạo mô tả đó sớm hơn một chút trước khi cố tải mô-đun. Trong cả hai cách, ai đó sẽ cần phải làm điều này và vấn đề là chính xác giống như –