Lưu cấu hình đơn giản với blackcat
in Projects on C#, Configuration
Blackcat là 1 bộ thư viện tiện ích đơn giản gọn nhẹ giành cho .Net, nó bao gồm nhiều thành phần như Configuration, EventBus, IoC, AppCrash… Hôm nay mình sẽ giới thiệu thành phần Configuration, với Configuration bạn có thể lưu hoặc load các cấu hình của ứng dụng chỉ với 1 dòng lệnh :)).
checkbox1.Checked = ConfigLoader.Default.Get<MyConfig>().EnableFeature1;
Để sử dụng thì bạn cần tạo cho mình 1 class mô tả các cấu hình, ví dụ:
class MyConfig
{
public bool EnableFeature1 {get;set;}
public string LoggedUserName {get;set;}
........
}
Khi dùng thì chỉ cần sử dụng ConfigLoader.Default.Get<YourConfigClass>()
, nó sẽ trả về instance của set cấu hình bạn cần. Trong trường hợp này sẽ như vầy:
// get config
checkbox1.Checked = ConfigLoader.Default.Get<MyConfig>().EnableFeature1;
// change config
ConfigLoader.Default.Get<MyConfig>().EnableFeature1 = checkbox1.Checked;
Mặt định thì mọi cấu hình sẽ được tự động lưu vào file khi bạn đóng ứng dụng.
Đây là 1 số chi tiết mà Configuration sẽ handle cho bạn:
- Lưu ở đâu: lưu ở file, mặt định là file json (tên file mặt định là yourAppName.json) trong working directory, nó sẽ có dạng như vầy nè.
{
"metadata": {
"modified": "2019-11-11T14:29:35.3268223+07:00"
},
"configs": [
{
"key": "MyConfig",
"data": {
"enableFeature1": true,
"loggedUserName": "sontx",
}
}
]
}
- Khi nào thì lưu: mặt định thì khi tắt ứng dụng nó sẽ tự lưu.
- Khi nào thì load: khi cần thì load :))
Bạn khó tính và bạn muốn nhiều hơn
- Giờ tôi không muốn lưu ở file đấy, tôi muốn lưu chổ khác thì làm thế quái nào: Tự impl
IDataStorage
rồi set choConfigLoader.Storage
là được. - Giờ tôi không muốn format json đấy thì làm sao nào: Bạn trẻ tự impl
IDataAdapter
rồi set choConfigLoader.Adapter
là được, mình có impl sẵn 1 cáiXmlDataAdapter
để format xml thay vì json đấy. - Tôi muốn lưu cấu hình ngay khi tôi change nó thay vì phải đợi đóng ứng dụng đấy thì sao nào: Cái này thì hơi chua đấy, bạn trẻ cần làm 3 việc sau:
- Set
ConfigLoader.SaveMode = SaveMode.OnChange
- Class cấu hình của bạn cần phải kế thừa từ
AutoNotifyPropertyChange.AutoNotifyPropertyChanged
- Các properties của bạn cần phải có keywork
virtual
- Set
- Tôi muốn thiết đặt các giá trị mặt định của cấu hình cho lần khởi chạy đầu tiên thì làm thê quái nào: Có 2 cách
- Đặt giá trị mặt định cho properties của class cấu hình :)) trò này thì đơn giản dể làm nhưng khổ cái là không thể thay đổi lúc runtime được.
- Gọi phương thức
ConfigLoader.InitializeSettings
với đối số là các cấu hình mặt định bạn muốn.
- Giờ tôi lười tạo cửa sổ để chỉnh sửa cấu hình nhưng tôi lại muốn có cửa sổ để chính sửa cấu hình (lú cmnl) thì làm thế quái nào: Đây là tiêu biểu của việc không muốn tán gái mà vẫn có gấu :)) nhưng rất may mắn cho bạn là
Blackcat.WinForm
hổ trợ việc này :))
using Blackcat.WinForm;
...........
// một cửa sổ nho nhỏ dể cmn thương sẽ hiển thị ra để bạn edit các cấu hình có trong MyConfig
var configChanged = ConfigLoader.Default.Get<MyConfig>().ShowEditor();