Ejemplo n.º 1
0
        public static void AddBindAppModelConfiguation(this IServiceCollection services, IConfiguration configuration,
                                                       AppSettings appSettings)
        {
            configuration.Bind(appSettings);
            appSettings.PreLoadModelConfig();
            //判断是否为新环境,如果是环境执行初始化,判断的条件就是AppData下存不存在AppSettings.json文件
            var isInit = !AppSettingsHelper.ExistAppSettingsFile();

            var typeFinder    = new WebAppTypeFinder();
            var modelSettings = typeFinder.FindOfType <IAppModuleConfig>();
            var instances     = modelSettings
                                .Select(startup => (IAppModuleConfig)Activator.CreateInstance(startup));

            foreach (var appModelConfig in instances)
            {
                var nodeName = appModelConfig?.GetType().Name ?? "TempModel";
                configuration.GetSection($"ModuleConfigurations:{nodeName}").Bind(appModelConfig);

                if (isInit)
                {
                    appModelConfig?.Init();
                }
                appSettings.ModuleConfigurations.Add(nodeName, appModelConfig);
            }

            services.AddSingleton(appSettings);
            AppSettingsHelper.SaveAppSettings(appSettings);
        }