public static IDynamicAuthorizationBuilder AddJsonStore(this IDynamicAuthorizationBuilder builder, Action <JsonOptions> options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var jsonOptions = new JsonOptions();

            options.Invoke(jsonOptions);

            if (jsonOptions.FilePath == null)
            {
                throw new NullReferenceException(nameof(jsonOptions.FilePath));
            }

            AddRequiredServices(builder.Services, jsonOptions);

            return(builder);
        }
        public static IDynamicAuthorizationBuilder AddSqlServerStore(this IDynamicAuthorizationBuilder builder, Action <SqlOptions> options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            var sqlOptions = new SqlOptions();

            options.Invoke(sqlOptions);

            var serviceProvider = builder.Services.BuildServiceProvider();
            var scope           = serviceProvider.CreateScope();
            var logger          = scope.ServiceProvider.GetService <ILogger <SqlTableCreator> >();

            var tableCreator = new SqlTableCreator(sqlOptions, logger);

            tableCreator.CreateTable();

            scope.Dispose();
            serviceProvider.Dispose();

            builder.Services.AddSingleton(sqlOptions);
            builder.Services.AddScoped <IRoleAccessStore, RoleAccessStore>();

            return(builder);
        }
        public static IDynamicAuthorizationBuilder AddJsonStore(this IDynamicAuthorizationBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            AddRequiredServices(builder.Services, new JsonOptions());

            return(builder);
        }
        public static IDynamicAuthorizationBuilder AddUi(this IDynamicAuthorizationBuilder builder, IMvcBuilder mvcBuilder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (mvcBuilder == null)
            {
                throw new ArgumentNullException(nameof(mvcBuilder));
            }

            var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => a.FullName.StartsWith("DynamicAuthorization.Mvc.Ui")).ToList();

            foreach (var assembly in assemblies)
            {
                if (assembly.FullName.Contains("Views"))
                {
                    mvcBuilder.PartManager.ApplicationParts.Add(new CompiledRazorAssemblyPart(assembly));
                }
                else
                {
                    mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(assembly));
                    var manifestResourceNames = assembly.GetManifestResourceNames();
                }
            }

            builder.Services.AddScoped <AddResourcesToViewFilter>();
            builder.Services.AddScoped(
                typeof(IIdentityService),
                typeof(IdentityService <, , ,>).MakeGenericType(
                    DynamicAuthorizationOptions.DbContextType,
                    DynamicAuthorizationOptions.UserType,
                    DynamicAuthorizationOptions.RoleType,
                    DynamicAuthorizationOptions.KeyType
                    ));

            return(builder);
        }