mirror of
https://github.com/AlexMacocian/Slim.git
synced 2026-07-15 15:19:59 +00:00
Add support for IServiceProviderIsService (#23)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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; }
|
||||
|
||||
+3
-3
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user