This repository was archived by the owner on Dec 20, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathDataPopulatorProviderFactory.cs
More file actions
101 lines (91 loc) · 2.81 KB
/
Copy pathDataPopulatorProviderFactory.cs
File metadata and controls
101 lines (91 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* _____ ______
* /_ / ____ ____ ____ _________ / __/ /_
* / / / __ \/ __ \/ __ \/ ___/ __ \/ /_/ __/
* / /__/ /_/ / / / / /_/ /\_ \/ /_/ / __/ /_
* /____/\____/_/ /_/\__ /____/\____/_/ \__/
* /____/
*
* Authors:
* 钟峰(Popeye Zhong) <zongsoft@qq.com>
*
* Copyright (C) 2015-2018 Zongsoft Corporation <http://www.zongsoft.com>
*
* This file is part of Zongsoft.Data.
*
* Zongsoft.Data is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Zongsoft.Data is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Zongsoft.Data; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
using System;
using System.Collections;
using System.Collections.Generic;
namespace Zongsoft.Data.Common
{
[System.ComponentModel.DefaultProperty(nameof(Providers))]
public class DataPopulatorProviderFactory : IDataPopulatorProviderFactory
{
#region 单例模式
public static readonly DataPopulatorProviderFactory Instance = new DataPopulatorProviderFactory();
#endregion
#region 成员字段
private readonly ICollection<IDataPopulatorProvider> _providers;
#endregion
#region 构造函数
private DataPopulatorProviderFactory()
{
_providers = new List<IDataPopulatorProvider>(new IDataPopulatorProvider[]
{
DictionaryPopulatorProvider.Instance,
ScalarPopulatorProvider.Instance,
EntityPopulatorProvider.Instance,
});
}
#endregion
#region 公共属性
public ICollection<IDataPopulatorProvider> Providers
{
get
{
return _providers;
}
}
#endregion
#region 公共方法
public IDataPopulatorProvider GetProvider(Type type)
{
if(type == null)
throw new ArgumentNullException(nameof(type));
foreach(var provider in _providers)
{
if(provider.CanPopulate(type))
return provider;
}
throw new DataException($"No found data populator provider for the '{type.FullName}' type.");
}
#endregion
#region 枚举遍历
public IEnumerator<IDataPopulatorProvider> GetEnumerator()
{
return _providers.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _providers.GetEnumerator();
}
#endregion
}
}