2013-07-21 39 views
6

Tôi đang cố gắng để tạo ra một phần tùy chỉnh tập tin cấu hình dựa trên AppSettings:Sự khác nhau giữa ConfigurationManager.GetSection và Configuration.GetSection là gì?

<configSections> 
    <section name="customConfiguration" 
      type="System.Configuration.AppSettingsSection, 
       System.Configuration, 
       Version=2.0.0.0, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a"/> 
</configSections> 

Khi tôi đã cố gắng đọc nó qua ConfigurationManager.GetSection ("customConfiguration") đối tượng trở về là kiểu System.Configuration.KeyValueInternalCollection. Tôi không thể đọc các giá trị của bộ sưu tập này, mặc dù tôi có thể nhìn thấy các phím, và tôi không thể đưa nó vào một AppSettingsSection.

This Stackoverflow câu trả lời gợi ý tôi nên sử dụng

Configuration config = 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
AppSettingsSection customSettingSection = 
    (AppSettingsSection)config.GetSection("customConfiguration"); 

này làm việc. Câu hỏi của tôi là: Sự khác nhau giữa ConfigurationManager.GetSection() và Configuration.GetSection() là gì? Khi nào tôi nên sử dụng một và khi nào tôi nên sử dụng thiết bị kia?

Trả lời

5

Theo tài liệu MSDN trên Configuration Lớp http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx,

Nếu nhu cầu ứng dụng của bạn chỉ đọc truy cập vào cấu hình riêng của mình, chúng tôi khuyên bạn sử dụng quá tải GetSection phương pháp cho các ứng dụng Web. Đối với ứng dụng khách, sử dụng phương thức GetSection.

Các phương pháp này cung cấp quyền truy cập vào các giá trị cấu hình được lưu trong bộ nhớ cache cho ứng dụng hiện tại, có hiệu suất tốt hơn so với lớp Cấu hình.

Cụ thể, trong ứng dụng khách, Trình quản lý cấu hình truy xuất tệp cấu hình thu được bằng cách hợp nhất tệp cấu hình ứng dụng, tệp cấu hình người dùng cục bộ và tệp cấu hình chuyển vùng.

+0

Vì vậy, Configuration.GetSection dành cho ứng dụng khách, nhận phần cấu hình người dùng được chỉ định (cho tất cả người dùng, hồ sơ cục bộ của người dùng hiện tại hoặc hồ sơ chuyển vùng của người dùng hiện tại, tùy thuộc vào ConfigurationUserLevel được chỉ định trong OpenExeConfiguration)? Và ConfigurationManager.GetSection lấy phần cấu hình mặc định, cho ứng dụng khách là sự kết hợp của cả ba cấu hình người dùng (tất cả người dùng, hồ sơ cục bộ của người dùng hiện tại, hồ sơ chuyển vùng của người dùng hiện tại)? Tại sao sau đó hai phương thức GetSection trả về các kiểu đối tượng khác nhau? –

+1

'System.Configuration.GetSection()' là chung và có thể được sử dụng cho cả ứng dụng web và ứng dụng khách, trong khi 'ConfigurationManager.GetSection()' là trình bao bọc được tối ưu hóa dành riêng cho ứng dụng khách. – Claies

+0

@Claies có nghĩa là không có cách nào mặc định để sử dụng 'ConfigurationManager.OpenMappedExeConfiguration()' để mở một tệp cấu hình khác và làm cho nó hoạt động tốt bằng cách sử dụng 'Configuration.GetSection()' để tải một phần. Vì chỉ 'ConfigurationManager.GetSection()' "hoạt động tốt" nhưng nó sử dụng cấu hình mặc định của ứng dụng – FRoZeN

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