Skip to content

Commit 0a04222

Browse files
committed
Fixed #141
1 parent c8a39a6 commit 0a04222

11 files changed

Lines changed: 45 additions & 101 deletions

File tree

package.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</PropertyGroup>
1111

1212
<PropertyGroup>
13-
<UnityAbstractionsVersion>4.0.*</UnityAbstractionsVersion>
13+
<UnityAbstractionsVersion>4.1.*</UnityAbstractionsVersion>
1414
</PropertyGroup>
1515

1616
</Project>

src/Builder/Context/BuilderContext.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,19 @@ public object Resolve(Type type, string name)
4141
// Process overrides if any
4242
if (null != Overrides)
4343
{
44+
NamedType namedType = new NamedType
45+
{
46+
Type = type,
47+
Name = name
48+
};
49+
4450
// Check if this parameter is overridden
4551
for (var index = Overrides.Length - 1; index >= 0; --index)
4652
{
4753
var resolverOverride = Overrides[index];
48-
4954
// If matches with current parameter
5055
if (resolverOverride is IResolve resolverPolicy &&
51-
resolverOverride is IEquatable<(Type, string)> comparer && comparer.Equals((type, name)))
56+
resolverOverride is IEquatable<NamedType> comparer && comparer.Equals(namedType))
5257
{
5358
var context = this;
5459

src/Processors/Constructor/ConstructorProcessor.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,9 @@ public override IEnumerable<object> Select(Type type, IPolicySet registration)
8181

8282
protected override IEnumerable<ConstructorInfo> DeclaredMembers(Type type)
8383
{
84-
#if NETSTANDARD1_0
8584
return type.GetTypeInfo()
8685
.DeclaredConstructors
87-
.Where(c => c.IsStatic == false && c.IsPublic);
88-
#else
89-
return type.GetConstructors(BindingFlags.Instance | BindingFlags.Public);
90-
#endif
86+
.Where(ctor => !ctor.IsFamily && !ctor.IsPrivate && !ctor.IsStatic);
9187
}
9288

9389
#endregion

src/Processors/Fields/FieldProcessor.cs

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using System.Linq.Expressions;
54
using System.Reflection;
65
using Unity.Builder;
@@ -25,12 +24,18 @@ public FieldProcessor(IPolicySet policySet)
2524

2625
protected override IEnumerable<FieldInfo> DeclaredMembers(Type type)
2726
{
28-
#if NETSTANDARD1_0
29-
return GetFieldsHierarchical(type).Where(f => !f.IsInitOnly && !f.IsStatic);
30-
#else
31-
return type.GetFields(BindingFlags.Instance | BindingFlags.Public)
32-
.Where(f => !f.IsInitOnly && !f.IsStatic);
33-
#endif
27+
var info = type.GetTypeInfo();
28+
while (null != info)
29+
{
30+
foreach (var member in info.DeclaredFields)
31+
{
32+
if (!member.IsFamily && !member.IsPrivate &&
33+
!member.IsInitOnly && !member.IsStatic)
34+
yield return member;
35+
}
36+
37+
info = info.BaseType?.GetTypeInfo();
38+
}
3439
}
3540

3641
protected override Type MemberType(FieldInfo info) => info.FieldType;
@@ -68,28 +73,5 @@ protected override ResolveDelegate<BuilderContext> GetResolverDelegate(FieldInfo
6873
}
6974

7075
#endregion
71-
72-
73-
#region Implementation
74-
#if NETSTANDARD1_0
75-
76-
public static IEnumerable<FieldInfo> GetFieldsHierarchical(Type type)
77-
{
78-
if (type == null)
79-
{
80-
return Enumerable.Empty<FieldInfo>();
81-
}
82-
83-
if (type == typeof(object))
84-
{
85-
return type.GetTypeInfo().DeclaredFields;
86-
}
87-
88-
return type.GetTypeInfo()
89-
.DeclaredFields
90-
.Concat(GetFieldsHierarchical(type.GetTypeInfo().BaseType));
91-
}
92-
#endif
93-
#endregion
9476
}
9577
}

src/Processors/Methods/MethodProcessor.cs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,17 @@ public MethodProcessor(IPolicySet policySet)
2727

2828
protected override IEnumerable<MethodInfo> DeclaredMembers(Type type)
2929
{
30-
#if NETSTANDARD1_0
31-
return GetMethodsHierarchical(type)
32-
.Where(c => c.IsStatic == false && c.IsPublic);
33-
34-
IEnumerable<MethodInfo> GetMethodsHierarchical(Type t)
30+
var info = type.GetTypeInfo();
31+
while (null != info)
3532
{
36-
if (t == null)
37-
{
38-
return Enumerable.Empty<MethodInfo>();
39-
}
40-
41-
if (t == typeof(object))
33+
foreach (var member in info.DeclaredMethods)
4234
{
43-
return t.GetTypeInfo().DeclaredMethods.Where(m => !m.IsStatic);
35+
if (!member.IsFamily && !member.IsPrivate && !member.IsStatic)
36+
yield return member;
4437
}
4538

46-
return t.GetTypeInfo().DeclaredMethods.Where(m => !m.IsStatic)
47-
.Concat(GetMethodsHierarchical(t.GetTypeInfo().BaseType));
39+
info = info.BaseType?.GetTypeInfo();
4840
}
49-
#else
50-
return type.GetMethods(BindingFlags.Instance | BindingFlags.Public);
51-
#endif
5241
}
5342

5443
#endregion

src/Processors/Properties/PropertyProcessor.cs

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using System.Linq.Expressions;
54
using System.Reflection;
65
using Unity.Builder;
@@ -27,25 +26,23 @@ public PropertyProcessor(IPolicySet policySet)
2726

2827
protected override IEnumerable<PropertyInfo> DeclaredMembers(Type type)
2928
{
30-
#if NETSTANDARD1_0
31-
return GetPropertiesHierarchical(type)
32-
.Where(p =>
33-
{
34-
if (!p.CanWrite) return false;
29+
var info = type.GetTypeInfo();
30+
while (null != info)
31+
{
32+
foreach (var member in info.DeclaredProperties)
33+
{
34+
if (!member.CanWrite || 0 != member.GetIndexParameters().Length)
35+
continue;
3536

36-
var propertyMethod = p.GetSetMethod(true) ??
37-
p.GetGetMethod(true);
37+
var setter = member.GetSetMethod(true);
38+
if (setter.IsPrivate || setter.IsFamily)
39+
continue;
3840

39-
// Skip static properties and indexers.
40-
if (propertyMethod.IsStatic || p.GetIndexParameters().Length != 0)
41-
return false;
41+
yield return member;
42+
}
4243

43-
return true;
44-
});
45-
#else
46-
return type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
47-
.Where(p => p.CanWrite && p.GetIndexParameters().Length == 0);
48-
#endif
44+
info = info.BaseType?.GetTypeInfo();
45+
}
4946
}
5047

5148
#endregion
@@ -85,29 +82,5 @@ protected override ResolveDelegate<BuilderContext> GetResolverDelegate(PropertyI
8582
}
8683

8784
#endregion
88-
89-
90-
#region Implementation
91-
92-
#if NETSTANDARD1_0
93-
public static IEnumerable<PropertyInfo> GetPropertiesHierarchical(Type type)
94-
{
95-
if (type == null)
96-
{
97-
return Enumerable.Empty<PropertyInfo>();
98-
}
99-
100-
if (type == typeof(object))
101-
{
102-
return type.GetTypeInfo().DeclaredProperties;
103-
}
104-
105-
return type.GetTypeInfo()
106-
.DeclaredProperties
107-
.Concat(GetPropertiesHierarchical(type.GetTypeInfo().BaseType));
108-
}
109-
#endif
110-
111-
#endregion
11285
}
11386
}

src/Unity.Container.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@
8888
<PrivateAssets>all</PrivateAssets>
8989
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
9090
</PackageReference>
91-
<PackageReference Include="System.ValueTuple" Version="4.5.*" />
9291
</ItemGroup>
9392

9493
</Project>

tests/Performance/Performance.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</ItemGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="BenchmarkDotNet" Version="0.11.3" />
16+
<PackageReference Include="BenchmarkDotNet" Version="0.11.4" />
1717
</ItemGroup>
1818

1919
<ItemGroup>

tests/Unity.Diagnostic/Unity.Specification.Tests.Diagnostic.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.0" />
1313
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
1414
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
1515
</ItemGroup>

tests/Unity.Specification/Unity.Specification.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.0" />
1313
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
1414
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
1515
</ItemGroup>

0 commit comments

Comments
 (0)