public SmartApplicationContext(
            IHostEnvironment hostEnvironment,
            IConfiguration configuration,
            ILogger logger,
            params Assembly[] coreAssemblies)
        {
            Guard.NotNull(hostEnvironment, nameof(hostEnvironment));
            Guard.NotNull(configuration, nameof(configuration));
            Guard.NotNull(logger, nameof(logger));

            HostEnvironment = hostEnvironment;
            Configuration   = configuration;
            Logger          = logger;

            ConfigureFileSystem(hostEnvironment);

            DataSettings.SetApplicationContext(this, OnDataSettingsLoaded);

            ModuleCatalog = new ModuleCatalog();
            TypeScanner   = new DefaultTypeScanner(ModuleCatalog, logger, coreAssemblies);
            OSIdentity    = new GenericOSIdentity();

            // Create app configuration
            // TODO: (core) Try to incorporate IOptionsMonitor<SmartConfiguration> somehow.
            var config = new SmartConfiguration();

            configuration.Bind("Smartstore", config);

            AppConfiguration = config;
        }
        private static void PopulateLinuxUser(GenericOSIdentity identity)
        {
            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    RedirectStandardInput  = true,
                    RedirectStandardOutput = true,
                    UseShellExecute        = false,
                    FileName  = "sh",
                    Arguments = "-c \" id -u ; id -G \""
                }
            };

            process.Start();
            process.WaitForExit();

            var res = process.StandardOutput.ReadToEnd();

            var respars = res.Split("\n");

            identity.UserId = respars[0];
            identity.Groups = respars[1].Split(" ").AsReadOnly();
        }
 private static void PopulateWindowsUser(GenericOSIdentity identity)
 {
     identity.Groups = WindowsIdentity.GetCurrent().Groups?.Select(p => p.Value).AsReadOnly();
     identity.UserId = identity.Name;
 }