/// <summary>
        /// Adds the in-memory api store.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="apiDescriptions">A list of services which will be added to the in-memory store.</param>
        /// <returns></returns>
        public static IServiceRepositoryBuilder AddInMemoryApiStore(this IServiceRepositoryBuilder builder, params ServiceApiDescription[] apiDescriptions)
        {
            builder.Services.AddSingleton(apiDescriptions);
            builder.AddApiStoreAsSingleton <InMemoryApiStore>();

            return(builder);
        }
        /// <summary>
        /// Adds an Api store as singleton.
        /// </summary>
        /// <typeparam name="T">Type of the api store</typeparam>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IServiceRepositoryBuilder AddApiStoreAsSingleton <T>(this IServiceRepositoryBuilder builder)
            where T : class, IApiStore
        {
            builder.Services.TryAddSingleton(typeof(T));
            builder.Services.AddSingleton <IApiStore, T>();

            return(builder);
        }
        /// <summary>
        /// Configures EntityFramework implementation of IApiStore.
        /// </summary>
        /// <typeparam name="TContext">The IConfigurationDbContext to use.</typeparam>
        /// <param name="builder">The builder.</param>
        /// <param name="storeOptionsAction">The store options action.</param>
        /// <returns></returns>
        public static IServiceRepositoryBuilder AddRepositoryStore <TContext>(this IServiceRepositoryBuilder builder, Action <RepositoryStoreOptions> storeOptionsAction = null)
            where TContext : DbContext, IRepositoryDbContext
        {
            builder.Services.AddRepositoryDbContext <TContext>(storeOptionsAction);

            builder.AddApiStore <ApiStore>();

            return(builder);
        }
 /// <summary>
 /// Configures EntityFramework implementation of IApiStore
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="storeOptionsAction">The store options action.</param>
 /// <returns></returns>
 public static IServiceRepositoryBuilder AddRepositoryStore(this IServiceRepositoryBuilder builder, Action <RepositoryStoreOptions> storeOptionsAction = null)
 {
     return(builder.AddRepositoryStore <RepositoryDbContext>(storeOptionsAction));
 }