/// <summary> /// Registers the Entity Framework 6.x stores services in the DI container and /// configures OpenIddict to use the Entity Framework 6.x entities by default. /// </summary> /// <param name="builder">The services builder used by OpenIddict to register new services.</param> /// <remarks>This extension can be safely called multiple times.</remarks> /// <returns>The <see cref="OpenIddictEntityFrameworkBuilder"/>.</returns> public static OpenIddictEntityFrameworkBuilder UseEntityFramework(this OpenIddictCoreBuilder builder) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } // Since Entity Framework 6.x may be used with databases performing case-insensitive // or culture-sensitive comparisons, ensure the additional filtering logic is enforced // in case case-sensitive stores were registered before this extension was called. builder.Configure(options => options.DisableAdditionalFiltering = false); builder.SetDefaultApplicationEntity <OpenIddictEntityFrameworkApplication>() .SetDefaultAuthorizationEntity <OpenIddictEntityFrameworkAuthorization>() .SetDefaultScopeEntity <OpenIddictEntityFrameworkScope>() .SetDefaultTokenEntity <OpenIddictEntityFrameworkToken>(); builder.ReplaceApplicationStoreResolver <OpenIddictEntityFrameworkApplicationStoreResolver>() .ReplaceAuthorizationStoreResolver <OpenIddictEntityFrameworkAuthorizationStoreResolver>() .ReplaceScopeStoreResolver <OpenIddictEntityFrameworkScopeStoreResolver>() .ReplaceTokenStoreResolver <OpenIddictEntityFrameworkTokenStoreResolver>(); builder.Services.TryAddSingleton <OpenIddictEntityFrameworkApplicationStoreResolver.TypeResolutionCache>(); builder.Services.TryAddSingleton <OpenIddictEntityFrameworkAuthorizationStoreResolver.TypeResolutionCache>(); builder.Services.TryAddSingleton <OpenIddictEntityFrameworkScopeStoreResolver.TypeResolutionCache>(); builder.Services.TryAddSingleton <OpenIddictEntityFrameworkTokenStoreResolver.TypeResolutionCache>(); builder.Services.TryAddScoped(typeof(OpenIddictEntityFrameworkApplicationStore <, , , ,>)); builder.Services.TryAddScoped(typeof(OpenIddictEntityFrameworkAuthorizationStore <, , , ,>)); builder.Services.TryAddScoped(typeof(OpenIddictEntityFrameworkScopeStore <, ,>)); builder.Services.TryAddScoped(typeof(OpenIddictEntityFrameworkTokenStore <, , , ,>)); return(new OpenIddictEntityFrameworkBuilder(builder.Services)); }
/// <summary> /// Registers the MongoDB stores services in the DI container and /// configures OpenIddict to use the MongoDB entities by default. /// </summary> /// <param name="builder">The services builder used by OpenIddict to register new services.</param> /// <remarks>This extension can be safely called multiple times.</remarks> /// <returns>The <see cref="OpenIddictMongoDbBuilder"/>.</returns> public static OpenIddictMongoDbBuilder UseMongoDb(this OpenIddictCoreBuilder builder) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } // Note: Mongo uses simple binary comparison checks by default so the additional // query filtering applied by the default OpenIddict managers can be safely disabled. builder.DisableAdditionalFiltering(); builder.SetDefaultApplicationEntity <OpenIddictMongoDbApplication>() .SetDefaultAuthorizationEntity <OpenIddictMongoDbAuthorization>() .SetDefaultScopeEntity <OpenIddictMongoDbScope>() .SetDefaultTokenEntity <OpenIddictMongoDbToken>(); // Note: the Mongo stores/resolvers don't depend on scoped/transient services and thus // can be safely registered as singleton services and shared/reused across requests. builder.ReplaceApplicationStoreResolver <OpenIddictMongoDbApplicationStoreResolver>(ServiceLifetime.Singleton) .ReplaceAuthorizationStoreResolver <OpenIddictMongoDbAuthorizationStoreResolver>(ServiceLifetime.Singleton) .ReplaceScopeStoreResolver <OpenIddictMongoDbScopeStoreResolver>(ServiceLifetime.Singleton) .ReplaceTokenStoreResolver <OpenIddictMongoDbTokenStoreResolver>(ServiceLifetime.Singleton); builder.Services.TryAddSingleton(typeof(OpenIddictMongoDbApplicationStore <>)); builder.Services.TryAddSingleton(typeof(OpenIddictMongoDbAuthorizationStore <>)); builder.Services.TryAddSingleton(typeof(OpenIddictMongoDbScopeStore <>)); builder.Services.TryAddSingleton(typeof(OpenIddictMongoDbTokenStore <>)); builder.Services.TryAddSingleton <IOpenIddictMongoDbContext, OpenIddictMongoDbContext>(); return(new OpenIddictMongoDbBuilder(builder.Services)); }