-
Notifications
You must be signed in to change notification settings - Fork 94
/
Copy pathIMemberNameResolver.cs
90 lines (75 loc) · 2.63 KB
/
IMemberNameResolver.cs
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
using System.Reflection;
using InfluxDB.Client.Core.Flux.Internal;
namespace InfluxDB.Client.Linq
{
/// <summary>
/// Resolver to use customized tag and field names in LINQ queries.
/// </summary>
public interface IMemberNameResolver
{
/// <summary>
/// Get Type Of Member
/// </summary>
/// <param name="memberInfo">for actual member</param>
/// <returns>Type of member for actual member</returns>
MemberType ResolveMemberType(MemberInfo memberInfo);
/// <summary>
/// Get name of property that will be use as a tag name or field name in InfluxDB.
/// </summary>
/// <param name="memberInfo">property</param>
/// <returns>Returns name of field or tag in InfluxDB</returns>
string GetColumnName(MemberInfo memberInfo);
/// <summary>
/// Get name of property for named field.
/// </summary>
/// <param name="memberInfo">property</param>
/// <param name="value">value of expression</param>
/// <returns>Return name of property.</returns>
string GetNamedFieldName(MemberInfo memberInfo, object value);
}
public enum MemberType
{
Measurement,
Tag,
Field,
Timestamp,
// Member Value is used as a name of field
NamedField,
// Member Value is used as a value of NamedField
NamedFieldValue
}
public class DefaultMemberNameResolver : IMemberNameResolver
{
private readonly AttributesCache _attributesCache = new AttributesCache();
public MemberType ResolveMemberType(MemberInfo memberInfo)
{
var attribute = _attributesCache.GetAttribute(memberInfo as PropertyInfo);
if (attribute != null)
{
if (attribute.IsMeasurement)
{
return MemberType.Measurement;
}
if (attribute.IsTag)
{
return MemberType.Tag;
}
if (attribute.IsTimestamp)
{
return MemberType.Timestamp;
}
}
return MemberType.Field;
}
public string GetColumnName(MemberInfo memberInfo)
{
var propertyInfo = memberInfo as PropertyInfo;
var attribute = _attributesCache.GetAttribute(propertyInfo);
return _attributesCache.GetColumnName(attribute, propertyInfo);
}
public string GetNamedFieldName(MemberInfo memberInfo, object value)
{
return GetColumnName(memberInfo);
}
}
}