mirror of
https://github.com/AlexMacocian/Slim.git
synced 2026-07-15 15:19:59 +00:00
Extend ServiceCollectionExtensions (#25)
* Make ServiceCollectionExtensions use IServiceCollection * Extend the collectionextensions to use an existing service manager
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user