2012-01-16 26 views
6

Tôi có một ứng dụng WPF Desktop sử dụng Prism 4, trong bootstrapper của tôi có đoạn mã sau:Làm thế nào để hạn chế lăng kính 4 chỉ tải các mô-đun được ký đặc biệt?

protected override IModuleCatalog CreateModuleCatalog() 
{ 
    var filepath = Assembly.GetExecutingAssembly().Location; 
    var path = Path.GetDirectoryName(filepath); 
    System.IO.Directory.SetCurrentDirectory(path); 
    path = Path.Combine(path, "Modules"); 
    var moduleCatalog = new DirectoryModuleCatalog() { ModulePath = path }; 
    return moduleCatalog; 
} 

mã trên là nói lăng kính để tải tất cả các dlls từ "[gốc ứng dụng của tôi] \ Modules" và kiểm tra xem liệu có bất kỳ lớp nào đã triển khai IModule hay không. Những gì tôi muốn làm là để hạn chế quá trình tải để chỉ DLLs đã được ký kết với một phím dấu hiệu cụ thể để ngăn chặn bất kỳ nhà phát triển để tiêm nó là mô-đun trong ứng dụng của tôi. xin vui lòng tư vấn nếu tôi đi theo con đường sai cho vấn đề như vậy.

Trả lời

2

Bạn đang đi đúng hướng, tuy nhiên, bạn cần tiến xa hơn một chút. DirectoryModuleCatalog được thiết kế để tải bất kỳ loại nào trong thư mục được chỉ định thực hiện giao diện IModule, như bạn đã thấy. Nếu bạn muốn giới hạn các mô-đun được nạp thêm (ví dụ, đối với các assembly được ký với một khóa cụ thể), bạn cần tạo một danh mục mô-đun tùy chỉnh (có thể xuất phát từ DirectoryModuleCatalog) và ghi đè phương thức Initialize. Khởi tạo là nơi danh mục mô-đun sẽ kiểm tra thư mục và tải một tập hợp các đối tượng ModuleInfo chứa thông tin về bất kỳ mô-đun nào trong thư mục. Bằng cách ghi đè phương thức này, bạn có thể kiểm tra các assembly trong thư mục và chỉ nạp các mô đun từ các assembly với chữ ký thích hợp. Trong phương thức Initialize, bạn sẽ điền thuộc tính Modules với ModuleInfos of Modules chứa trong các assembly hợp lệ.

Sau đó, trong đoạn mã trên, thay vì tạo một DirectoryModuleCatalog mới(), bạn sẽ tạo danh mục mô-đun tùy chỉnh của mình.

Xin lưu ý, tùy thuộc vào cách bạn kiểm tra chữ ký của hội đồng, bạn có thể tải lắp ráp vào bộ nhớ (ngay cả khi bạn không tạo bất kỳ mô-đun nào có sẵn trong danh mục). Nếu đây là trường hợp, bạn có thể muốn xác minh các hội đồng trong một AppDomain riêng biệt mà sau đó có thể được dỡ bỏ (do đó dỡ các hội đồng unsigned từ bộ nhớ).

+1

Điều này đã giúp ích rất nhiều, cảm ơn Brian. –

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