Tôi có một lớp học trong một ứng dụng web tôi đang làm việc trên đó giữ các cài đặt máy khách. Đối với một số nền tảng, tôi không sở hữu lớp này, và thay đổi nó không phải là một lựa chọn. Gần đây, chúng tôi đã thêm một số logic để lưu trữ các cài đặt trong cơ sở dữ liệu và tôi đã được giao nhiệm vụ tạo trang để chỉnh sửa chúng, đủ công bằng.C# - Khởi tạo lại lớp tĩnh?
Đây là vấn đề của tôi; các cài đặt được giữ trong một lớp tĩnh và bản thân chúng là các thuộc tính tĩnh, chỉ đọc. Ví dụ:
public static class Settings
{
public static readonly setting1 = SettingmanagerClass.GetSetting("setting1");
public static readonly setting2 = SettingmanagerClass.GetSetting("setting2");
public static readonly setting3 = SettingmanagerClass.GetSetting("setting3");
}
Bây giờ, ví dụ, thông qua trang tôi đã viết, chúng tôi thay đổi giá trị cho setting2 thành "Happy Variable"; nó tiết kiệm cho DB tốt, nhưng bây giờ tôi cần nó được phản ánh trong ứng dụng web như là giá trị mới. Vì nó là một thuộc tính chỉ đọc tĩnh của một lớp tĩnh, nó chỉ được gọi khi ứng dụng lần đầu tiên kết nối và không thể được đặt thủ công.
Chỉ cần nhắc lại, tôi không sở hữu lớp gốc, vì vậy "chỉ cần tạo thuộc tính có thể ghi" không phải là (hiện tại) là tùy chọn hợp lệ. Thông thường tôi sẽ nói chuyện này với ông chủ của tôi và anh ta sẽ gọi điện phán quyết và có thể cho phép tôi sửa đổi lớp khác, nhưng tôi không ở vị trí để thực hiện cuộc gọi đó và anh ấy đã ra khỏi văn phòng trong tuần.
Vì vậy, về cơ bản; có cách nào để khởi tạo lại một lớp tĩnh khi ứng dụng web đã bắt đầu chạy không? Tôi chỉ cần cho nó để tải lại tất cả các thuộc tính của nó như thể các ứng dụng đã được xây dựng lại và bắt đầu lên một lần nữa.
Bạn có thể thay đổi nó bằng cách phản chiếu hoặc tái chế quy trình. [Đây là một chủ đề] (http://stackoverflow.com/questions/934930/can-i-change-a-private-readonly-field-in-c-sharp-using-reflection) về cách làm phản ánh: – zeal
Chỉ cần một lưu ý: Bạn biết rằng tất cả các thiết lập (fe từ web.config) được lưu trữ không? –
Có thể khởi động lại IIS của bạn không? [Bắt đầu hoặc dừng một hồ bơi ứng dụng (IIS 7)] (http://technet.microsoft.com/en-us/library/cc732742 (v = WS.10) .aspx) – Steve