Skip to content

Commit 9b12e10

Browse files
committed
- added type fixture
1 parent cc004d0 commit 9b12e10

File tree

5 files changed

+54
-26
lines changed

5 files changed

+54
-26
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Linq;
2+
using NUnit.Framework;
3+
4+
namespace Shuttle.Core.Reflection.Tests
5+
{
6+
[TestFixture]
7+
public class ReflectionServiceFixture
8+
{
9+
[Test]
10+
public void Should_be_able_to_get_runtime_assemblies()
11+
{
12+
Assert.That(new ReflectionService().GetRuntimeAssemblies().Count(), Is.GreaterThan(0));
13+
}
14+
15+
[Test]
16+
public void Should_be_able_to_get_types()
17+
{
18+
Assert.That(new ReflectionService().GetTypesAssignableTo<SomeClass>().Count(), Is.EqualTo(1));
19+
Assert.That(new ReflectionService().GetTypesAssignableTo<ISomeClass>().Count(), Is.EqualTo(1));
20+
}
21+
}
22+
}

Shuttle.Core.Reflection.Tests/Shuttle.Core.Reflection.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp2.0</TargetFramework>
4+
<TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
55
</PropertyGroup>
66

77
<ItemGroup>

Shuttle.Core.Reflection/IReflectionService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ public interface IReflectionService
1313
IEnumerable<Assembly> GetAssemblies();
1414
IEnumerable<Assembly> GetMatchingAssemblies(string regex, string folder);
1515
IEnumerable<Assembly> GetMatchingAssemblies(string regex);
16-
IEnumerable<Assembly> RuntimeAssemblies();
17-
IEnumerable<Type> GetTypes<T>();
18-
IEnumerable<Type> GetTypes(Type type);
19-
IEnumerable<Type> GetTypes(Assembly assembly);
20-
IEnumerable<Type> GetTypes<T>(Assembly assembly);
21-
IEnumerable<Type> GetTypes(Type type, Assembly assembly);
16+
IEnumerable<Assembly> GetRuntimeAssemblies();
17+
IEnumerable<Type> GetTypesAssignableTo<T>();
18+
IEnumerable<Type> GetTypesAssignableTo(Type type);
19+
IEnumerable<Type> GetTypesAssignableTo(Assembly assembly);
20+
IEnumerable<Type> GetTypesAssignableTo<T>(Assembly assembly);
21+
IEnumerable<Type> GetTypesAssignableTo(Type type, Assembly assembly);
2222
}
2323
}

Shuttle.Core.Reflection/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
[assembly: AssemblyTitle(".NET Standard 2.0")]
3030
#endif
3131

32-
[assembly: AssemblyVersion("10.0.5.0")]
32+
[assembly: AssemblyVersion("10.0.6.0")]
3333
[assembly: AssemblyCopyright("Copyright © Eben Roux 2017")]
3434
[assembly: AssemblyProduct("Shuttle.Core.Reflection")]
3535
[assembly: AssemblyCompany("Shuttle")]
3636
[assembly: AssemblyConfiguration("Release")]
37-
[assembly: AssemblyInformationalVersion("10.0.5")]
37+
[assembly: AssemblyInformationalVersion("10.0.6")]
3838
[assembly: ComVisible(false)]

Shuttle.Core.Reflection/ReflectionService.cs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
using System.Linq;
55
using System.Reflection;
66
using System.Text.RegularExpressions;
7-
using Microsoft.DotNet.PlatformAbstractions;
8-
using Microsoft.Extensions.DependencyModel;
97
using Shuttle.Core.Contract;
108
using Shuttle.Core.Logging;
9+
#if (NETCOREAPP2_0 || NETSTANDARD2_0)
10+
using Microsoft.DotNet.PlatformAbstractions;
11+
using Microsoft.Extensions.DependencyModel;
12+
#endif
1113

1214
namespace Shuttle.Core.Reflection
1315
{
@@ -37,7 +39,7 @@ public string AssemblyPath(Assembly assembly)
3739

3840
public Assembly GetAssembly(string assemblyPath)
3941
{
40-
var result = RuntimeAssemblies()
42+
var result = GetRuntimeAssemblies()
4143
.FirstOrDefault(assembly => AssemblyPath(assembly)
4244
.Equals(assemblyPath, StringComparison.InvariantCultureIgnoreCase));
4345

@@ -104,7 +106,7 @@ public Assembly FindAssemblyNamed(string name)
104106
hasFileExtension = true;
105107
}
106108

107-
var result = RuntimeAssemblies()
109+
var result = GetRuntimeAssemblies()
108110
.FirstOrDefault(assembly => assembly.GetName()
109111
.Name.Equals(assemblyName, StringComparison.InvariantCultureIgnoreCase));
110112

@@ -188,7 +190,7 @@ private IEnumerable<Assembly> GetMatchingAssemblies(Regex expression, string fol
188190

189191
public IEnumerable<Assembly> GetMatchingAssemblies(string regex)
190192
{
191-
var assemblies = new List<Assembly>(RuntimeAssemblies());
193+
var assemblies = new List<Assembly>(GetRuntimeAssemblies());
192194

193195
foreach (
194196
var assembly in
@@ -215,30 +217,34 @@ var assembly in
215217
return assemblies;
216218
}
217219

218-
public IEnumerable<Assembly> RuntimeAssemblies()
220+
public IEnumerable<Assembly> GetRuntimeAssemblies()
219221
{
220-
var result = new List<Assembly>();
222+
#if (!NETCOREAPP2_0 && !NETSTANDARD2_0)
223+
return AppDomain.CurrentDomain.GetAssemblies();
224+
#else
225+
var result = new List<Assembly>();
221226

222227
foreach (var runtimeAssemblyName in DependencyContext.Default.GetRuntimeAssemblyNames(RuntimeEnvironment.GetRuntimeIdentifier()))
223228
{
224229
result.Add(Assembly.Load(runtimeAssemblyName));
225230
}
226231

227232
return result;
228-
}
233+
#endif
234+
}
229235

230-
public IEnumerable<Type> GetTypes<T>()
236+
public IEnumerable<Type> GetTypesAssignableTo<T>()
231237
{
232-
return GetTypes(typeof(T));
238+
return GetTypesAssignableTo(typeof(T));
233239
}
234240

235-
public IEnumerable<Type> GetTypes(Type type)
241+
public IEnumerable<Type> GetTypesAssignableTo(Type type)
236242
{
237243
var result = new List<Type>();
238244

239245
foreach (var assembly in GetAssemblies())
240246
{
241-
GetTypes(type, assembly)
247+
GetTypesAssignableTo(type, assembly)
242248
.Where(candidate => result.Find(existing => existing == candidate) == null)
243249
.ToList()
244250
.ForEach(add => result.Add(add));
@@ -247,20 +253,20 @@ public IEnumerable<Type> GetTypes(Type type)
247253
return result;
248254
}
249255

250-
public IEnumerable<Type> GetTypes<T>(Assembly assembly)
256+
public IEnumerable<Type> GetTypesAssignableTo<T>(Assembly assembly)
251257
{
252-
return GetTypes(typeof(T), assembly);
258+
return GetTypesAssignableTo(typeof(T), assembly);
253259
}
254260

255-
public IEnumerable<Type> GetTypes(Type type, Assembly assembly)
261+
public IEnumerable<Type> GetTypesAssignableTo(Type type, Assembly assembly)
256262
{
257263
Guard.AgainstNull(type, nameof(type));
258264
Guard.AgainstNull(assembly, nameof(assembly));
259265

260-
return GetTypes(assembly).Where(candidate => candidate.IsAssignableTo(type) && candidate != type).ToList();
266+
return GetTypesAssignableTo(assembly).Where(candidate => candidate.IsAssignableTo(type) && !(candidate.IsInterface && candidate == type)).ToList();
261267
}
262268

263-
public IEnumerable<Type> GetTypes(Assembly assembly)
269+
public IEnumerable<Type> GetTypesAssignableTo(Assembly assembly)
264270
{
265271
Type[] types;
266272

0 commit comments

Comments
 (0)