XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.AutoConfig

【DLL】自动实现配置文件的存储

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.AutoConfig

change-调整了ProfileList的泛型顺序和名称 add-新增ProfileDictionary,与ProfileList类似,可以在增删改的时候自动存储

f45692f
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

4 个文件 +231 -74
Modified README.md +26 -0
@@ -32,6 +32,32 @@ class Program
32 32 }
33 33 ```
34 34
35 #### 使用ProfileList和ProfileDictionary来储存集合或字典
36
37 ```csharp
38 //配置文件类
39 partial class SystemProfile
40 {
41 [ProfileProperty]
42 ProfileList<SystemProfile, string> nameList = [];
43
44 [ProfileProperty]
45 ProfileDictionary<SystemProfile, string, long> nameIdDictionary = [];
46 }
47
48 //使用配置文件
49 class Program
50 {
51 static void Main(string[] args)
52 {
53 SystemProfile.NameList.Add("张三"); //在添加值的时候会自动记录并储存
54 SystemProfile.NameList.AddRange(["李四", "王五"]); //添加多条记录
55 SystemProfile.NameList.Remove("李四"); //删除值的时候也会自动记录
56 SystemProfile.NameIdDictionary.Add("张三", "0da87wd89a-0dwa8d"); //字典也是一样
57 }
58 }
59 ```
60
35 61 #### 设置get和set方法
36 62
37 63 ```csharp
Added XFEExtension.NetCore.AutoConfig/ProfileDictionary.cs +155 -0
@@ -0,0 +1,155 @@
1 using System.Collections;
2 using System.Diagnostics.CodeAnalysis;
3 using System.Runtime.Serialization;
4
5 namespace XFEExtension.NetCore.AutoConfig;
6
7 /// <summary>
8 /// 配置文件字典
9 /// </summary>
10 /// <typeparam name="TProfile">配置文件类型</typeparam>
11 /// <typeparam name="TKey">字典Key泛型</typeparam>
12 /// <typeparam name="TValue">字典Value泛型</typeparam>
13 public class ProfileDictionary<TProfile, TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IDictionary<TKey, TValue>, IReadOnlyCollection<KeyValuePair<TKey, TValue>>, IReadOnlyDictionary<TKey, TValue>, ICollection, IDictionary, IDeserializationCallback, ISerializable where TKey : notnull
14 {
15 private readonly Dictionary<TKey, TValue> _innerDictionary;
16
17 /// <summary>
18 /// 创建空字典
19 /// </summary>
20 public ProfileDictionary() => _innerDictionary = [];
21
22 /// <summary>
23 /// 使用现有字典创建
24 /// </summary>
25 /// <param name="innerDictionary">现有字典</param>
26 public ProfileDictionary(Dictionary<TKey, TValue> innerDictionary) => _innerDictionary = innerDictionary;
27
28 ///<inheritdoc/>
29 public TValue this[TKey key] { get => ((IDictionary<TKey, TValue>)_innerDictionary)[key]; set => ((IDictionary<TKey, TValue>)_innerDictionary)[key] = value; }
30 ///<inheritdoc/>
31 public object? this[object key] { get => ((IDictionary)_innerDictionary)[key]; set => ((IDictionary)_innerDictionary)[key] = value; }
32
33 ///<inheritdoc/>
34 public int Count => ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).Count;
35
36 ///<inheritdoc/>
37 public bool IsReadOnly => ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).IsReadOnly;
38
39 ///<inheritdoc/>
40 public ICollection<TKey> Keys => ((IDictionary<TKey, TValue>)_innerDictionary).Keys;
41
42 ///<inheritdoc/>
43 public ICollection<TValue> Values => ((IDictionary<TKey, TValue>)_innerDictionary).Values;
44
45 ///<inheritdoc/>
46 public bool IsSynchronized => ((ICollection)_innerDictionary).IsSynchronized;
47
48 ///<inheritdoc/>
49 public object SyncRoot => ((ICollection)_innerDictionary).SyncRoot;
50
51 ///<inheritdoc/>
52 public bool IsFixedSize => ((IDictionary)_innerDictionary).IsFixedSize;
53
54 IEnumerable<TKey> IReadOnlyDictionary<TKey, TValue>.Keys => ((IReadOnlyDictionary<TKey, TValue>)_innerDictionary).Keys;
55
56 ICollection IDictionary.Keys => ((IDictionary)_innerDictionary).Keys;
57
58 IEnumerable<TValue> IReadOnlyDictionary<TKey, TValue>.Values => ((IReadOnlyDictionary<TKey, TValue>)_innerDictionary).Values;
59
60 ICollection IDictionary.Values => ((IDictionary)_innerDictionary).Values;
61
62 ///<inheritdoc/>
63 public void Add(KeyValuePair<TKey, TValue> item)
64 {
65 ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).Add(item);
66 XFEProfile.SaveProfile(typeof(TProfile));
67 }
68
69 ///<inheritdoc/>
70 public void Add(TKey key, TValue value)
71 {
72 ((IDictionary<TKey, TValue>)_innerDictionary).Add(key, value);
73 XFEProfile.SaveProfile(typeof(TProfile));
74 }
75
76 ///<inheritdoc/>
77 public void Add(object key, object? value)
78 {
79 ((IDictionary)_innerDictionary).Add(key, value);
80 XFEProfile.SaveProfile(typeof(TProfile));
81 }
82
83 ///<inheritdoc/>
84 public void Clear()
85 {
86 ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).Clear();
87 XFEProfile.SaveProfile(typeof(TProfile));
88 }
89
90 ///<inheritdoc/>
91 public bool Contains(KeyValuePair<TKey, TValue> item) => ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).Contains(item);
92
93 ///<inheritdoc/>
94 public bool Contains(object key) => ((IDictionary)_innerDictionary).Contains(key);
95
96 ///<inheritdoc/>
97 public bool ContainsKey(TKey key) => ((IDictionary<TKey, TValue>)_innerDictionary).ContainsKey(key);
98
99 ///<inheritdoc/>
100 public bool ContainsValue(TValue value) => _innerDictionary.ContainsValue(value);
101
102 ///<inheritdoc/>
103 public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) => ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).CopyTo(array, arrayIndex);
104
105 ///<inheritdoc/>
106 public void CopyTo(Array array, int index) => ((ICollection)_innerDictionary).CopyTo(array, index);
107
108 ///<inheritdoc/>
109 public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() => ((IEnumerable<KeyValuePair<TKey, TValue>>)_innerDictionary).GetEnumerator();
110
111 ///<inheritdoc/>
112 [Obsolete]
113 public void GetObjectData(SerializationInfo info, StreamingContext context) => ((ISerializable)_innerDictionary).GetObjectData(info, context);
114
115 ///<inheritdoc/>
116 public void OnDeserialization(object? sender) => ((IDeserializationCallback)_innerDictionary).OnDeserialization(sender);
117
118 ///<inheritdoc/>
119 public bool Remove(KeyValuePair<TKey, TValue> item)
120 {
121 var result = ((ICollection<KeyValuePair<TKey, TValue>>)_innerDictionary).Remove(item);
122 XFEProfile.SaveProfile(typeof(TProfile));
123 return result;
124 }
125
126 ///<inheritdoc/>
127 public bool Remove(TKey key)
128 {
129 var result = ((IDictionary<TKey, TValue>)_innerDictionary).Remove(key);
130 XFEProfile.SaveProfile(typeof(TProfile));
131 return result;
132 }
133
134 ///<inheritdoc/>
135 public void Remove(object key)
136 {
137 ((IDictionary)_innerDictionary).Remove(key);
138 XFEProfile.SaveProfile(typeof(TProfile));
139 }
140
141 ///<inheritdoc/>
142 public bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value) => ((IDictionary<TKey, TValue>)_innerDictionary).TryGetValue(key, out value);
143
144 ///<inheritdoc/>
145 public bool TryAdd(TKey key, TValue value)
146 {
147 var result = _innerDictionary.TryAdd(key, value);
148 XFEProfile.SaveProfile(typeof(TProfile));
149 return result;
150 }
151
152 IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_innerDictionary).GetEnumerator();
153
154 IDictionaryEnumerator IDictionary.GetEnumerator() => ((IDictionary)_innerDictionary).GetEnumerator();
155 }
Modified XFEExtension.NetCore.AutoConfig/ProfileList.cs +47 -71
@@ -5,158 +5,134 @@ namespace XFEExtension.NetCore.AutoConfig;
5 5 /// <summary>
6 6 /// 配置文件列表
7 7 /// </summary>
8 /// <typeparam name="T">列表泛型</typeparam>
9 /// <typeparam name="P">配置文件泛型</typeparam>
10 public class ProfileList<T, P> : ICollection<T>, IEnumerable<T>, IEnumerable, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection, IList
8 /// <typeparam name="TProfile">配置文件类型</typeparam>
9 /// <typeparam name="TValue">列表泛型</typeparam>
10 public class ProfileList<TProfile, TValue> : ICollection<TValue>, IEnumerable<TValue>, IEnumerable, IList<TValue>, IReadOnlyCollection<TValue>, IReadOnlyList<TValue>, ICollection, IList
11 11 {
12 private readonly List<T> innerList;
12 private readonly List<TValue> _innerList;
13 13
14 14 /// <summary>
15 /// 空列表
15 /// 创建空列表
16 16 /// </summary>
17 public ProfileList() => innerList = [];
17 public ProfileList() => _innerList = [];
18 18
19 19 /// <summary>
20 20 /// 使用已有列表创建
21 21 /// </summary>
22 22 /// <param name="innerList">已有列表</param>
23 public ProfileList(List<T> innerList) => this.innerList = innerList;
23 public ProfileList(List<TValue> innerList) => _innerList = innerList;
24 24
25 25 ///<inheritdoc/>
26 public T this[int index] { get => ((IList<T>)innerList)[index]; set => ((IList<T>)innerList)[index] = value; }
27 object? IList.this[int index] { get => ((IList)innerList)[index]; set => ((IList)innerList)[index] = value; }
26 public TValue this[int index] { get => ((IList<TValue>)_innerList)[index]; set => ((IList<TValue>)_innerList)[index] = value; }
27 object? IList.this[int index] { get => ((IList)_innerList)[index]; set => ((IList)_innerList)[index] = value; }
28 28
29 29 ///<inheritdoc/>
30 public int Count => ((ICollection<T>)innerList).Count;
30 public int Count => ((ICollection<TValue>)_innerList).Count;
31 31
32 32 ///<inheritdoc/>
33 public bool IsReadOnly => ((ICollection<T>)innerList).IsReadOnly;
33 public bool IsReadOnly => ((ICollection<TValue>)_innerList).IsReadOnly;
34 34
35 35 ///<inheritdoc/>
36 public bool IsSynchronized => ((ICollection)innerList).IsSynchronized;
36 public bool IsSynchronized => ((ICollection)_innerList).IsSynchronized;
37 37
38 38 ///<inheritdoc/>
39 public object SyncRoot => ((ICollection)innerList).SyncRoot;
39 public object SyncRoot => ((ICollection)_innerList).SyncRoot;
40 40
41 41 ///<inheritdoc/>
42 public bool IsFixedSize => ((IList)innerList).IsFixedSize;
42 public bool IsFixedSize => ((IList)_innerList).IsFixedSize;
43 43
44 44 ///<inheritdoc/>
45 public void Add(T item)
45 public void Add(TValue item)
46 46 {
47 ((ICollection<T>)innerList).Add(item);
48 XFEProfile.SaveProfile(typeof(P));
47 ((ICollection<TValue>)_innerList).Add(item);
48 XFEProfile.SaveProfile(typeof(TProfile));
49 49 }
50 50
51 51 ///<inheritdoc/>
52 52 public int Add(object? value)
53 53 {
54 var result = ((IList)innerList).Add(value);
55 XFEProfile.SaveProfile(typeof(P));
54 var result = ((IList)_innerList).Add(value);
55 XFEProfile.SaveProfile(typeof(TProfile));
56 56 return result;
57 57 }
58 58
59 59 ///<inheritdoc/>
60 public void AddRange(IEnumerable<T> collection)
60 public void AddRange(IEnumerable<TValue> collection)
61 61 {
62 innerList.AddRange(collection);
63 XFEProfile.SaveProfile(typeof(P));
62 _innerList.AddRange(collection);
63 XFEProfile.SaveProfile(typeof(TProfile));
64 64 }
65 65
66 66 ///<inheritdoc/>
67 public void AddRange(ReadOnlySpan<T> source)
67 public void AddRange(ReadOnlySpan<TValue> source)
68 68 {
69 innerList.AddRange(source);
70 XFEProfile.SaveProfile(typeof(P));
69 _innerList.AddRange(source);
70 XFEProfile.SaveProfile(typeof(TProfile));
71 71 }
72 72
73 73 ///<inheritdoc/>
74 74 public void Clear()
75 75 {
76 ((ICollection<T>)innerList).Clear();
77 XFEProfile.SaveProfile(typeof(P));
76 ((ICollection<TValue>)_innerList).Clear();
77 XFEProfile.SaveProfile(typeof(TProfile));
78 78 }
79 79
80 80 ///<inheritdoc/>
81 public bool Contains(T item)
82 {
83 return ((ICollection<T>)innerList).Contains(item);
84 }
81 public bool Contains(TValue item) => ((ICollection<TValue>)_innerList).Contains(item);
85 82
86 83 ///<inheritdoc/>
87 public bool Contains(object? value)
88 {
89 return ((IList)innerList).Contains(value);
90 }
84 public bool Contains(object? value) => ((IList)_innerList).Contains(value);
91 85
92 86 ///<inheritdoc/>
93 public void CopyTo(T[] array, int arrayIndex)
94 {
95 ((ICollection<T>)innerList).CopyTo(array, arrayIndex);
96 }
87 public void CopyTo(TValue[] array, int arrayIndex) => ((ICollection<TValue>)_innerList).CopyTo(array, arrayIndex);
97 88
98 89 ///<inheritdoc/>
99 public void CopyTo(Array array, int index)
100 {
101 ((ICollection)innerList).CopyTo(array, index);
102 }
90 public void CopyTo(Array array, int index) => ((ICollection)_innerList).CopyTo(array, index);
103 91
104 92 ///<inheritdoc/>
105 public IEnumerator<T> GetEnumerator()
106 {
107 return ((IEnumerable<T>)innerList).GetEnumerator();
108 }
93 public IEnumerator<TValue> GetEnumerator() => ((IEnumerable<TValue>)_innerList).GetEnumerator();
109 94
110 95 ///<inheritdoc/>
111 public int IndexOf(T item)
112 {
113 return ((IList<T>)innerList).IndexOf(item);
114 }
96 public int IndexOf(TValue item) => ((IList<TValue>)_innerList).IndexOf(item);
115 97
116 98 ///<inheritdoc/>
117 public int IndexOf(object? value)
118 {
119 return ((IList)innerList).IndexOf(value);
120 }
99 public int IndexOf(object? value) => ((IList)_innerList).IndexOf(value);
121 100
122 101 ///<inheritdoc/>
123 public void Insert(int index, T item)
102 public void Insert(int index, TValue item)
124 103 {
125 ((IList<T>)innerList).Insert(index, item);
126 XFEProfile.SaveProfile(typeof(P));
104 ((IList<TValue>)_innerList).Insert(index, item);
105 XFEProfile.SaveProfile(typeof(TProfile));
127 106 }
128 107
129 108 ///<inheritdoc/>
130 109 public void Insert(int index, object? value)
131 110 {
132 ((IList)innerList).Insert(index, value);
133 XFEProfile.SaveProfile(typeof(P));
111 ((IList)_innerList).Insert(index, value);
112 XFEProfile.SaveProfile(typeof(TProfile));
134 113 }
135 114
136 115 ///<inheritdoc/>
137 public bool Remove(T item)
116 public bool Remove(TValue item)
138 117 {
139 var result = ((ICollection<T>)innerList).Remove(item);
140 XFEProfile.SaveProfile(typeof(P));
118 var result = ((ICollection<TValue>)_innerList).Remove(item);
119 XFEProfile.SaveProfile(typeof(TProfile));
141 120 return result;
142 121 }
143 122
144 123 ///<inheritdoc/>
145 124 public void Remove(object? value)
146 125 {
147 ((IList)innerList).Remove(value);
148 XFEProfile.SaveProfile(typeof(P));
126 ((IList)_innerList).Remove(value);
127 XFEProfile.SaveProfile(typeof(TProfile));
149 128 }
150 129
151 130 ///<inheritdoc/>
152 131 public void RemoveAt(int index)
153 132 {
154 ((IList<T>)innerList).RemoveAt(index);
155 XFEProfile.SaveProfile(typeof(P));
133 ((IList<TValue>)_innerList).RemoveAt(index);
134 XFEProfile.SaveProfile(typeof(TProfile));
156 135 }
157 136
158 IEnumerator IEnumerable.GetEnumerator()
159 {
160 return ((IEnumerable)innerList).GetEnumerator();
161 }
137 IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_innerList).GetEnumerator();
162 138 }
Modified XFEExtension.NetCore.AutoConfig/XFEExtension.NetCore.AutoConfig.csproj +3 -3
@@ -17,17 +17,17 @@
17 17 <PackageTags>XFE;config;profile;auto</PackageTags>
18 18 <PackageReleaseNotes>## 调整
19 19
20 调整了配置文件的默认储存位置 =&gt; 从/Profiles/xxx.xfe调整为/Profiles/xxx.xpf文件
20 调整了ProfileList的泛型顺序和名称
21 21
22 22 ## 新增
23 23
24 新增ProfileList,该类型与List功能类似,但是其可以在调用Add、Remove、Clear等对列表进行增删改的操作时自动保存
24 新增ProfileDictionary,与ProfileList类似,可以在增删改的时候自动存储
25 25
26 26 ## 严重
27 27
28 28 无</PackageReleaseNotes>
29 29 <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
30 <Version>1.2.0</Version>
30 <Version>1.3.0</Version>
31 31 <GenerateDocumentationFile>True</GenerateDocumentationFile>
32 32 </PropertyGroup>
33 33