/// <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));
    }
Exemple #2
0
    /// <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));
    }