Browse Source

Update the ReplaceApplicationManager/ReplaceAuthorizationManager/ReplaceScopeManager/ReplaceTokenManager to register the implementation type as a service

pull/619/head
Kévin Chalet 8 years ago
parent
commit
b68106cd4d
  1. 24
      src/OpenIddict.Core/OpenIddictCoreBuilder.cs
  2. 32
      test/OpenIddict.Core.Tests/OpenIddictCoreBuilderTests.cs

24
src/OpenIddict.Core/OpenIddictCoreBuilder.cs

@ -329,11 +329,17 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentException("The specified type is invalid.", nameof(type)); throw new ArgumentException("The specified type is invalid.", nameof(type));
} }
Services.Replace(new ServiceDescriptor(type, type, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictApplicationManager<>), type, lifetime)); Services.Replace(new ServiceDescriptor(typeof(OpenIddictApplicationManager<>), type, lifetime));
} }
else else
{ {
object ResolveManager(IServiceProvider provider)
=> provider.GetRequiredService(typeof(OpenIddictApplicationManager<>)
.MakeGenericType(root.GenericTypeArguments[0]));
Services.Replace(new ServiceDescriptor(type, ResolveManager, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictApplicationManager<>) Services.Replace(new ServiceDescriptor(typeof(OpenIddictApplicationManager<>)
.MakeGenericType(root.GenericTypeArguments[0]), type, lifetime)); .MakeGenericType(root.GenericTypeArguments[0]), type, lifetime));
} }
@ -420,11 +426,17 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentException("The specified type is invalid.", nameof(type)); throw new ArgumentException("The specified type is invalid.", nameof(type));
} }
Services.Replace(new ServiceDescriptor(type, type, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictAuthorizationManager<>), type, lifetime)); Services.Replace(new ServiceDescriptor(typeof(OpenIddictAuthorizationManager<>), type, lifetime));
} }
else else
{ {
object ResolveManager(IServiceProvider provider)
=> provider.GetRequiredService(typeof(OpenIddictAuthorizationManager<>)
.MakeGenericType(root.GenericTypeArguments[0]));
Services.Replace(new ServiceDescriptor(type, ResolveManager, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictAuthorizationManager<>) Services.Replace(new ServiceDescriptor(typeof(OpenIddictAuthorizationManager<>)
.MakeGenericType(root.GenericTypeArguments[0]), type, lifetime)); .MakeGenericType(root.GenericTypeArguments[0]), type, lifetime));
} }
@ -510,11 +522,17 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentException("The specified type is invalid.", nameof(type)); throw new ArgumentException("The specified type is invalid.", nameof(type));
} }
Services.Replace(new ServiceDescriptor(type, type, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictScopeManager<>), type, lifetime)); Services.Replace(new ServiceDescriptor(typeof(OpenIddictScopeManager<>), type, lifetime));
} }
else else
{ {
object ResolveManager(IServiceProvider provider)
=> provider.GetRequiredService(typeof(OpenIddictScopeManager<>)
.MakeGenericType(root.GenericTypeArguments[0]));
Services.Replace(new ServiceDescriptor(type, ResolveManager, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictScopeManager<>) Services.Replace(new ServiceDescriptor(typeof(OpenIddictScopeManager<>)
.MakeGenericType(root.GenericTypeArguments[0]), type, lifetime)); .MakeGenericType(root.GenericTypeArguments[0]), type, lifetime));
} }
@ -601,11 +619,17 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentException("The specified type is invalid.", nameof(type)); throw new ArgumentException("The specified type is invalid.", nameof(type));
} }
Services.Replace(new ServiceDescriptor(type, type, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictTokenManager<>), type, lifetime)); Services.Replace(new ServiceDescriptor(typeof(OpenIddictTokenManager<>), type, lifetime));
} }
else else
{ {
object ResolveManager(IServiceProvider provider)
=> provider.GetRequiredService(typeof(OpenIddictTokenManager<>)
.MakeGenericType(root.GenericTypeArguments[0]));
Services.Replace(new ServiceDescriptor(type, ResolveManager, lifetime));
Services.Replace(new ServiceDescriptor(typeof(OpenIddictTokenManager<>) Services.Replace(new ServiceDescriptor(typeof(OpenIddictTokenManager<>)
.MakeGenericType(root.GenericTypeArguments[0]), type, lifetime)); .MakeGenericType(root.GenericTypeArguments[0]), type, lifetime));
} }

32
test/OpenIddict.Core.Tests/OpenIddictCoreBuilderTests.cs

@ -41,6 +41,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceApplicationManager(typeof(OpenGenericApplicationManager<>)); builder.ReplaceApplicationManager(typeof(OpenGenericApplicationManager<>));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(OpenGenericApplicationManager<>) &&
service.ImplementationType == typeof(OpenGenericApplicationManager<>));
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictApplicationManager<>) && service.ServiceType == typeof(OpenIddictApplicationManager<>) &&
service.ImplementationType == typeof(OpenGenericApplicationManager<>)); service.ImplementationType == typeof(OpenGenericApplicationManager<>));
@ -60,6 +63,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceApplicationManager(typeof(ClosedGenericApplicationManager)); builder.ReplaceApplicationManager(typeof(ClosedGenericApplicationManager));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(ClosedGenericApplicationManager) &&
service.ImplementationFactory != null);
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictApplicationManager<CustomApplication>) && service.ServiceType == typeof(OpenIddictApplicationManager<CustomApplication>) &&
service.ImplementationType == typeof(ClosedGenericApplicationManager)); service.ImplementationType == typeof(ClosedGenericApplicationManager));
@ -83,7 +89,7 @@ namespace OpenIddict.Core.Tests
} }
[Fact] [Fact]
public void ReplaceApplicationStoreResolver_OverridesDefaultManager() public void ReplaceApplicationStoreResolver_OverridesDefaultResolver()
{ {
// Arrange // Arrange
var services = CreateServices(); var services = CreateServices();
@ -126,6 +132,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceAuthorizationManager(typeof(OpenGenericAuthorizationManager<>)); builder.ReplaceAuthorizationManager(typeof(OpenGenericAuthorizationManager<>));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(OpenGenericAuthorizationManager<>) &&
service.ImplementationType == typeof(OpenGenericAuthorizationManager<>));
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictAuthorizationManager<>) && service.ServiceType == typeof(OpenIddictAuthorizationManager<>) &&
service.ImplementationType == typeof(OpenGenericAuthorizationManager<>)); service.ImplementationType == typeof(OpenGenericAuthorizationManager<>));
@ -145,6 +154,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceAuthorizationManager(typeof(ClosedGenericAuthorizationManager)); builder.ReplaceAuthorizationManager(typeof(ClosedGenericAuthorizationManager));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(ClosedGenericAuthorizationManager) &&
service.ImplementationFactory != null);
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictAuthorizationManager<CustomAuthorization>) && service.ServiceType == typeof(OpenIddictAuthorizationManager<CustomAuthorization>) &&
service.ImplementationType == typeof(ClosedGenericAuthorizationManager)); service.ImplementationType == typeof(ClosedGenericAuthorizationManager));
@ -167,7 +179,7 @@ namespace OpenIddict.Core.Tests
} }
[Fact] [Fact]
public void ReplaceAuthorizationStoreResolver_OverridesDefaultManager() public void ReplaceAuthorizationStoreResolver_OverridesDefaultResolver()
{ {
// Arrange // Arrange
var services = CreateServices(); var services = CreateServices();
@ -210,6 +222,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceScopeManager(typeof(OpenGenericScopeManager<>)); builder.ReplaceScopeManager(typeof(OpenGenericScopeManager<>));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(OpenGenericScopeManager<>) &&
service.ImplementationType == typeof(OpenGenericScopeManager<>));
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictScopeManager<>) && service.ServiceType == typeof(OpenIddictScopeManager<>) &&
service.ImplementationType == typeof(OpenGenericScopeManager<>)); service.ImplementationType == typeof(OpenGenericScopeManager<>));
@ -229,6 +244,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceScopeManager(typeof(ClosedGenericScopeManager)); builder.ReplaceScopeManager(typeof(ClosedGenericScopeManager));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(ClosedGenericScopeManager) &&
service.ImplementationFactory != null);
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictScopeManager<CustomScope>) && service.ServiceType == typeof(OpenIddictScopeManager<CustomScope>) &&
service.ImplementationType == typeof(ClosedGenericScopeManager)); service.ImplementationType == typeof(ClosedGenericScopeManager));
@ -252,7 +270,7 @@ namespace OpenIddict.Core.Tests
} }
[Fact] [Fact]
public void ReplaceScopeStoreResolver_OverridesDefaultManager() public void ReplaceScopeStoreResolver_OverridesDefaultResolver()
{ {
// Arrange // Arrange
var services = CreateServices(); var services = CreateServices();
@ -295,6 +313,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceTokenManager(typeof(OpenGenericTokenManager<>)); builder.ReplaceTokenManager(typeof(OpenGenericTokenManager<>));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(OpenGenericTokenManager<>) &&
service.ImplementationType == typeof(OpenGenericTokenManager<>));
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictTokenManager<>) && service.ServiceType == typeof(OpenIddictTokenManager<>) &&
service.ImplementationType == typeof(OpenGenericTokenManager<>)); service.ImplementationType == typeof(OpenGenericTokenManager<>));
@ -314,6 +335,9 @@ namespace OpenIddict.Core.Tests
builder.ReplaceTokenManager(typeof(ClosedGenericTokenManager)); builder.ReplaceTokenManager(typeof(ClosedGenericTokenManager));
// Assert // Assert
Assert.Contains(services, service =>
service.ServiceType == typeof(ClosedGenericTokenManager) &&
service.ImplementationFactory != null);
Assert.Contains(services, service => Assert.Contains(services, service =>
service.ServiceType == typeof(OpenIddictTokenManager<CustomToken>) && service.ServiceType == typeof(OpenIddictTokenManager<CustomToken>) &&
service.ImplementationType == typeof(ClosedGenericTokenManager)); service.ImplementationType == typeof(ClosedGenericTokenManager));
@ -337,7 +361,7 @@ namespace OpenIddict.Core.Tests
} }
[Fact] [Fact]
public void ReplaceTokenStoreResolver_OverridesDefaultManager() public void ReplaceTokenStoreResolver_OverridesDefaultResolver()
{ {
// Arrange // Arrange
var services = CreateServices(); var services = CreateServices();

Loading…
Cancel
Save