2015-06-02 17 views
6

Chúng tôi đang triển khai mô-đun plug and play cho ứng dụng của chúng tôi nơi người dùng có thể tải và dỡ bỏ thư viện lớp mong muốn khi chạy. Vì vậy, tôi đã quyết định sử dụng MEF và sao chép bóng tối của thư viện lớp.Truy cập tệp cấu hình trên miền ứng dụng

Điều ở đây là mỗi thư viện lớp có thể có các thuộc tính cấu hình khác nhau cần được người dùng đặt. Ứng dụng chính của tôi không có kiến ​​thức về các cấu hình có trong thư viện lớp.

Bây giờ vấn đề là khi tôi cố chuyển tệp cấu hình ứng dụng được tải bằng thư viện lớp từ miền ứng dụng này sang tên miền ứng dụng khác.

Không có MEF, tôi vừa trả lại Settings.Default từ thư viện lớp học và tôi đã sử dụng nó trong ứng dụng chính của chúng tôi để chỉnh sửa cài đặt. Với tính năng sao chép MEF và bóng tối, dường như không hoạt động vì

  1. Loại đối tượng cần được cả hai bên biết.
  2. Tôi không thể triển khai MarshalByRefObject trên tệp cài đặt kể từ tệp cài đặt đã được mở rộng ApplicationSettingsBase trong đó là lớp trừu tượng và C# không hỗ trợ đa kế thừa.

Hiện tại tôi đang tạo một lớp chứa tất cả các thuộc tính dưới dạng chuỗi và tạo GUI trong ứng dụng chính của tôi dựa trên nội dung lớp này.

public class ExtensionModuleConfiguration : MarshalByRefObject 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public List<string> Options { get; set; } 
    public UIElements ToolUIElement { get; set; } 
} 

public enum UIElements 
{ 
    ComboBox, 
    TextBox 
} 

Tôi phải nói đây không phải là giải pháp tốt nhất. Ai đó có thể đề xuất cách tốt hơn để đặt cấu hình của thư viện lớp trong MEF?

Trả lời

0

Có hai cách để bạn có thể thực hiện. Bạn phải thông báo cho .NET. App.config nào sẽ được tải trong appdomain của lớp plugin MEF của bạn.

Vì vậy bạn có thể chỉ app.config đặc biệt đối với DLL plugin của bạn như thế này:

ConfigurationManager.OpenExeConfiguration("Plugin.dll"); 
var name = AppSettings.Settings["Name"].Value; 

Hoặc bạn có thể tải các app.config cho DLL ứng dụng chính của bạn và đặt tất cả các appSettings trong tập tin đó. Trong trường hợp này, bạn nên làm:

var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
var name = config.AppSettings.Settings["Name"].Value; 

Cả hai giải pháp nên được gọi từ bên trong của bạn Thực hiện trình cắm ví dụ như trong hàm dựng. Hoặc bằng cách gọi đầu tiên đến một số thuộc tính cấu hình được nạp lười.

+0

Tôi muốn người dùng chỉnh sửa nội dung của tệp app.config của plugin DLL trong ứng dụng chính của tôi. Tôi có thể tải nó với plugin DLL. Những gì tôi muốn là chỉnh sửa nó từ ứng dụng chính –

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