Extend ServiceCollectionExtensions (#25)

* Make ServiceCollectionExtensions use IServiceCollection

* Extend the collectionextensions to use an existing service manager
This commit is contained in:
2022-09-09 19:42:55 +02:00
committed by GitHub
parent bfeb8b8e25
commit c487033aad
3 changed files with 32 additions and 9 deletions
@@ -191,4 +191,17 @@ public sealed class ServiceCollectionExtensionsTests
services.Should().HaveCount(0);
}
[TestMethod]
public void BuildSlimServiceProvider_WithExistingServiceManager_UsesExistingServiceManager()
{
var serviceManager = new ServiceManager();
serviceManager.RegisterSingleton<ITestService, TestService>();
var serviceCollection = new Microsoft.Extensions.DependencyInjection.ServiceCollection();
var serviceProvider = serviceCollection.BuildSlimServiceProvider(serviceManager);
var testService = serviceProvider.GetRequiredService<ITestService>();
testService.Should().NotBeNull();
}
}
@@ -4,10 +4,12 @@ using Microsoft.Extensions.DependencyInjection;
namespace Slim.Integration.ServiceCollection;
public static class ServiceCollectionExtensions
{
public static System.IServiceProvider BuildSlimServiceProvider(this Microsoft.Extensions.DependencyInjection.ServiceCollection serviceCollection)
public static System.IServiceProvider BuildSlimServiceProvider(this IServiceCollection serviceCollection, IServiceManager serviceManager)
{
var serviceManager = new ServiceManager();
foreach(var serviceDescriptor in serviceCollection)
_ = serviceCollection ?? throw new ArgumentNullException(nameof(serviceCollection));
_ = serviceManager ?? throw new ArgumentNullException(nameof(serviceManager));
foreach (var serviceDescriptor in serviceCollection)
{
switch (serviceDescriptor.Lifetime)
{
@@ -29,6 +31,14 @@ public static class ServiceCollectionExtensions
return serviceManager;
}
public static System.IServiceProvider BuildSlimServiceProvider(this IServiceCollection serviceCollection)
{
_ = serviceCollection ?? throw new ArgumentNullException(nameof(serviceCollection));
var serviceManager = new ServiceManager();
return serviceCollection.BuildSlimServiceProvider(serviceManager);
}
private static void RegisterServiceProviderDependencies(IServiceManager serviceManager)
{
serviceManager.RegisterResolver(new IEnumerableResolver());
@@ -36,7 +46,7 @@ public static class ServiceCollectionExtensions
serviceManager.RegisterScoped<IServiceProviderIsService, SlimServiceProviderIsService>();
}
private static void RegisterSingleton(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
private static void RegisterSingleton(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
{
if (serviceDescriptor.ImplementationInstance is null &&
serviceDescriptor.ImplementationFactory is not null)
@@ -54,7 +64,7 @@ public static class ServiceCollectionExtensions
}
}
private static void RegisterScoped(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
private static void RegisterScoped(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
{
if (serviceDescriptor.ImplementationInstance is null &&
serviceDescriptor.ImplementationFactory is not null)
@@ -72,7 +82,7 @@ public static class ServiceCollectionExtensions
}
}
private static void RegisterTransient(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
private static void RegisterTransient(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
{
if (serviceDescriptor.ImplementationInstance is null &&
serviceDescriptor.ImplementationFactory is not null)
+3 -3
View File
@@ -8,10 +8,10 @@
<Company />
<Product></Product>
<Description>Integration with Microsoft.DependencyInjection library.</Description>
<AssemblyVersion>1.0.2</AssemblyVersion>
<FileVersion>1.0.2</FileVersion>
<AssemblyVersion>1.0.3</AssemblyVersion>
<FileVersion>1.0.3</FileVersion>
<PackageProjectUrl>https://github.com/AlexMacocian/Slim</PackageProjectUrl>
<Version>1.0.2</Version>
<Version>1.0.3</Version>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>LICENSE</PackageLicenseFile>