// This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers().AddNewtonsoftJson();

            services.Configure <FormOptions>(options =>
            {
                options.MultipartBodyLengthLimit = 100 * 1024 * 1024;
            });
            services.AddMvc(o =>
            {
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .AddRequirements(new AuthorizationPageRequirement())
                             .Build();
                o.Filters.Add(new AuthorizeFilter(policy));
                o.Filters.Add(typeof(MyActionFilter));
            }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
            .AddSessionStateTempDataProvider()    //Prevent request too long
            .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; });


            services.ConfigureApplicationCookie(options =>
            {
                options.LoginPath        = new PathString("/Account/Login");
                options.AccessDeniedPath = new PathString("/Account/AccessDenied");
                //options.LogoutPath = new PathString("/[your-path]");
            });

            var host = Configuration["DocumentManagementSettings:Host"];
            var stringServerContextLogin = Configuration["DocumentManagementSettings:ServerContextLogin"];

            var serverContextLogin = stringServerContextLogin.Split(";");

            if (serverContextLogin.Length < 2)
            {
                throw new Exception("Destination Server must be set first");
            }

            //set global variable param model
            var globalVariable = new GlobalVariableParamModel()
            {
                ApplicationDomain         = Configuration["GlobalVariable:ApplicationDomain"],
                ApplicationName           = Configuration["GlobalVariable:ApplicationName"],
                ConnectionString          = Configuration["ConnectionStrings:DefaultConnection"],
                ContentRootPath           = environment.ContentRootPath,
                ReportBaseUrl             = Configuration["GlobalVariable:ReportDomain"],
                EmailNotificationUsername = Configuration["GlobalVariable:EmailNotificationUsername"],
                EmailNotificationPassword = Configuration["GlobalVariable:EmailNotificationPassword"],
                EmailNotificationHost     = Configuration["GlobalVariable:EmailNotificationHost"],
                EmailNotificationPort     = Convert.ToInt16(Configuration["GlobalVariable:EmailNotificationPort"]),
                SensenetBaseUrl           = Configuration["GlobalVariable:SensenetBaseUrl"],
                EnvironmentVariable       = !string.IsNullOrEmpty(Configuration["GlobalVariable:EnvironmentVariable"]) ? Configuration["GlobalVariable:EnvironmentVariable"] : "Development"
            };

            services.AddSingleton(globalVariable);

            //services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(AppSettingsJson.GetConnectionString()));
            services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));
            //services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:PetroseaConnection"]));

            //Get from APPSETTING.JSON connectionString
            //add identity
            services.AddIdentity <ApplicationUser, ApplicationRole>(options =>
            {
                options.Password.RequiredLength         = 8;
                options.Password.RequireLowercase       = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireDigit           = false;
            })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            services.AddDistributedMemoryCache();

            services.AddSession(options =>
            {
                // Set a short timeout for easy testing.
                options.IdleTimeout        = TimeSpan.FromSeconds(10);
                options.Cookie.HttpOnly    = true;
                options.Cookie.IsEssential = true;
            });
            //services.AddKendo();

            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddTransient <IAuthorizationHandler, AuthorizationPageHandler>();

            services.AddScoped <IPrincipal>(sp => sp.GetService <IHttpContextAccessor>().HttpContext.User);
        }
 public MyActionFilter(ApplicationDbContext context, IPrincipal principal, GlobalVariableParamModel globalParameter) : base(context, principal, globalParameter)
 {
 }
 protected BaseRepository(ApplicationDbContext context, IPrincipal principal, GlobalVariableParamModel globalVariable)
 {
     this.context         = context;
     this.principal       = principal;
     this._globalVariable = globalVariable;
 }