Skip to content

Commit 2b2950c

Browse files
committed
Removed registration logic from DefaultServiceProvider and renamed it to ActivatorServiceProvider
1 parent e61274a commit 2b2950c

File tree

8 files changed

+83
-88
lines changed

8 files changed

+83
-88
lines changed

src/NHibernate.Test/Async/CfgTest/SettingsFactoryFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ private Task InvalidRegisteredServiceAsync<TService>()
5050
{
5151
try
5252
{
53-
var sp = new DefaultServiceProvider();
53+
var sp = new SimpleServiceProvider();
5454
sp.Register<TService>(() => throw new InvalidOperationException());
5555

5656
Environment.ServiceProvider = sp;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using NHibernate.Bytecode;
3+
using NUnit.Framework;
4+
5+
namespace NHibernate.Test.Bytecode
6+
{
7+
[TestFixture]
8+
public class ActivatorServiceProviderFixture
9+
{
10+
public class WithOutPublicParameterLessCtor
11+
{
12+
public string Something { get; set; }
13+
protected WithOutPublicParameterLessCtor() { }
14+
15+
public WithOutPublicParameterLessCtor(string something)
16+
{
17+
Something = something;
18+
}
19+
}
20+
21+
public class PublicParameterLessCtor
22+
{
23+
}
24+
25+
protected virtual IServiceProvider GetServiceProvider()
26+
{
27+
return new ActivatorServiceProvider();
28+
}
29+
30+
[Test]
31+
public void CreateInstanceDefCtor()
32+
{
33+
var sp = GetServiceProvider();
34+
Assert.Throws<ArgumentNullException>(() => sp.GetService(null));
35+
Assert.Throws<MissingMethodException>(() => sp.GetService(typeof(WithOutPublicParameterLessCtor)));
36+
var instance = sp.GetService(typeof(PublicParameterLessCtor));
37+
Assert.That(instance, Is.Not.Null);
38+
Assert.That(instance, Is.InstanceOf<PublicParameterLessCtor>());
39+
}
40+
}
41+
}

src/NHibernate.Test/Bytecode/DefaultServiceProviderFixture.cs

Lines changed: 0 additions & 75 deletions
This file was deleted.

src/NHibernate.Test/CfgTest/SettingsFactoryFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void RegisteredServices()
6868
var sqlExceptionConverter = Substitute.For<ISQLExceptionConverter>();
6969
var transactionFactory = Substitute.For<ITransactionFactory>();
7070

71-
var sp = new DefaultServiceProvider();
71+
var sp = new SimpleServiceProvider();
7272
sp.Register(() => batcherFactory);
7373
sp.Register(() => cacheProvider);
7474
sp.Register(() => connectionProvider);
@@ -115,7 +115,7 @@ public void InvalidRegisteredServices()
115115

116116
private void InvalidRegisteredService<TService>()
117117
{
118-
var sp = new DefaultServiceProvider();
118+
var sp = new SimpleServiceProvider();
119119
sp.Register<TService>(() => throw new InvalidOperationException());
120120

121121
Environment.ServiceProvider = sp;

src/NHibernate/Bytecode/DefaultServiceProvider.cs renamed to src/NHibernate.Test/CfgTest/SimpleServiceProvider.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,9 @@
55
using System.Text;
66
using System.Threading.Tasks;
77

8-
namespace NHibernate.Bytecode
8+
namespace NHibernate.Test.CfgTest
99
{
10-
/// <summary>
11-
/// The default NHibernate service provider that uses <see cref="Activator.CreateInstance(System.Type)"/> to instantiate
12-
/// services by default.
13-
/// </summary>
14-
public class DefaultServiceProvider : IServiceProvider
10+
public class SimpleServiceProvider : IServiceProvider
1511
{
1612
private readonly ConcurrentDictionary<System.Type, Func<object>> _registeredTypeProviders =
1713
new ConcurrentDictionary<System.Type, Func<object>>();

src/NHibernate.Test/UtilityTest/PropertiesHelperTest.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using NHibernate.Bytecode;
44
using NHibernate.Connection;
5+
using NHibernate.Test.CfgTest;
56
using NHibernate.Util;
67
using NUnit.Framework;
78

@@ -60,7 +61,7 @@ public void GetInstanceByDefault()
6061
[Test]
6162
public void GetInstanceByRegistration()
6263
{
63-
var sp = new DefaultServiceProvider();
64+
var sp = new SimpleServiceProvider();
6465
sp.Register<IConnectionProvider, DriverConnectionProvider>();
6566
Cfg.Environment.ServiceProvider = sp;
6667
var instance = PropertiesHelper.GetInstance<IConnectionProvider>(
@@ -98,7 +99,7 @@ public void GetInstanceByInvalidDefault()
9899
[Test]
99100
public void GetInstanceByInvalidRegistration()
100101
{
101-
var sp = new DefaultServiceProvider();
102+
var sp = new SimpleServiceProvider();
102103
sp.Register(typeof(IConnectionProvider), () => new PropertiesHelperTest());
103104
Cfg.Environment.ServiceProvider = sp;
104105
Assert.Throws<HibernateException>(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Concurrent;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace NHibernate.Bytecode
9+
{
10+
/// <summary>
11+
/// The default NHibernate service provider that uses <see cref="Activator.CreateInstance(System.Type)"/> to instantiate
12+
/// services.
13+
/// </summary>
14+
public class ActivatorServiceProvider : IServiceProvider
15+
{
16+
/// <inheritdoc />
17+
public object GetService(System.Type serviceType)
18+
{
19+
if (serviceType == null)
20+
{
21+
throw new ArgumentNullException(nameof(serviceType));
22+
}
23+
24+
if (serviceType.IsInterface || serviceType.IsAbstract)
25+
{
26+
return null;
27+
}
28+
29+
return Activator.CreateInstance(serviceType);
30+
}
31+
}
32+
}

src/NHibernate/Cfg/Environment.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ public object GetService(System.Type serviceType)
432432
/// is created, otherwise the change may not take effect.
433433
/// For entities see <see cref="IReflectionOptimizer"/> and its implementations.
434434
/// </remarks>
435-
public static IServiceProvider ServiceProvider { get; set; } = new DefaultServiceProvider();
435+
public static IServiceProvider ServiceProvider { get; set; } = new ActivatorServiceProvider();
436436

437437
/// <summary>
438438
/// Whether to enable the use of reflection optimizer
@@ -478,7 +478,7 @@ public static IServiceProvider BuildServiceProvider(IDictionary<string, string>
478478
var typeAssemblyQualifiedName = PropertiesHelper.GetString(PropertyServiceProvider, properties, null);
479479
if (typeAssemblyQualifiedName == null)
480480
{
481-
var serviceProvider = new DefaultServiceProvider();
481+
var serviceProvider = new ActivatorServiceProvider();
482482
log.Info("Service provider class : {0}", serviceProvider.GetType());
483483
return serviceProvider;
484484
}

0 commit comments

Comments
 (0)