Add support for IServiceProviderIsService (#23)

This commit is contained in:
2022-09-09 16:46:30 +02:00
committed by GitHub
parent 39f83d30ee
commit 1c3f837f41
6 changed files with 58 additions and 8 deletions
@@ -142,4 +142,29 @@ public sealed class ServiceCollectionExtensionsTests
serviceProvider.Should().BeOfType<ServiceManager>();
scopedServiceProvider.As<ServiceManager>().ParentServiceManager.Should().Be(serviceProvider);
}
[TestMethod]
public void BuildSlimServiceProvider_SupportsSlimServiceProviderIsService_ReturnsTrueForRegisteredService()
{
var serviceCollection = new Microsoft.Extensions.DependencyInjection.ServiceCollection();
ServiceCollectionServiceExtensions.AddTransient<ITestService, TestService>(serviceCollection);
var serviceProvider = serviceCollection.BuildSlimServiceProvider();
var isServiceApi = serviceProvider.GetRequiredService<IServiceProviderIsService>();
isServiceApi.IsService(typeof(ITestService)).Should().BeTrue();
}
[TestMethod]
public void BuildSlimServiceProvider_SupportsSlimServiceProviderIsService_ReturnsFalseForRegisteredService()
{
var serviceCollection = new Microsoft.Extensions.DependencyInjection.ServiceCollection();
ServiceCollectionServiceExtensions.AddTransient<ITestService, TestService>(serviceCollection);
var serviceProvider = serviceCollection.BuildSlimServiceProvider();
var isServiceApi = serviceProvider.GetRequiredService<IServiceProviderIsService>();
isServiceApi.IsService(typeof(TestService)).Should().BeFalse();
isServiceApi.IsService(typeof(object)).Should().BeFalse();
}
}
@@ -25,10 +25,16 @@ public static class ServiceCollectionExtensions
}
}
serviceManager.RegisterScoped<IServiceScopeFactory, ServiceScopeFactory>();
RegisterServiceProviderDependencies(serviceManager);
return serviceManager;
}
private static void RegisterServiceProviderDependencies(IServiceManager serviceManager)
{
serviceManager.RegisterScoped<IServiceScopeFactory, SlimServiceScopeFactory>();
serviceManager.RegisterScoped<IServiceProviderIsService, SlimServiceProviderIsService>();
}
private static void RegisterSingleton(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor)
{
if (serviceDescriptor.ImplementationInstance is null &&
@@ -0,0 +1,19 @@
using System;
using Microsoft.Extensions.DependencyInjection;
namespace Slim.Integration.ServiceCollection;
internal sealed class SlimServiceProviderIsService : IServiceProviderIsService
{
private readonly IServiceManager serviceManager;
public SlimServiceProviderIsService(IServiceManager serviceManager)
{
this.serviceManager = serviceManager;
}
public bool IsService(Type serviceType)
{
return this.serviceManager.IsRegistered(serviceType);
}
}
@@ -3,7 +3,7 @@ using Microsoft.Extensions.DependencyInjection;
namespace Slim.Integration.ServiceCollection;
public sealed class ServiceScope : IServiceScope
internal sealed class SlimServiceScope : IServiceScope
{
public System.IServiceProvider ServiceProvider { get; set; }
@@ -2,11 +2,11 @@
namespace Slim.Integration.ServiceCollection;
public sealed class ServiceScopeFactory : IServiceScopeFactory
internal sealed class SlimServiceScopeFactory : IServiceScopeFactory
{
private readonly IServiceManager serviceManager;
public ServiceScopeFactory(
public SlimServiceScopeFactory(
IServiceManager serviceManager)
{
this.serviceManager = serviceManager;
@@ -15,6 +15,6 @@ public sealed class ServiceScopeFactory : IServiceScopeFactory
public IServiceScope CreateScope()
{
IServiceProvider scopedServiceManager = this.serviceManager.CreateScope();
return new ServiceScope { ServiceProvider = scopedServiceManager };
return new SlimServiceScope { ServiceProvider = scopedServiceManager };
}
}
+3 -3
View File
@@ -8,10 +8,10 @@
<Company />
<Product></Product>
<Description>Integration with Microsoft.DependencyInjection library.</Description>
<AssemblyVersion>1.0.0</AssemblyVersion>
<FileVersion>1.0.0</FileVersion>
<AssemblyVersion>1.0.1</AssemblyVersion>
<FileVersion>1.0.1</FileVersion>
<PackageProjectUrl>https://github.com/AlexMacocian/Slim</PackageProjectUrl>
<Version>1.0.0</Version>
<Version>1.0.1</Version>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>LICENSE</PackageLicenseFile>