Beispiel #1
0
        public async Task <IReadOnlyList <ISettingValue> > GetAllSettingValuesAsync(SettingScopes scopes)
        {
            var settingDefinitions = new Dictionary <string, SettingDefinition>();
            var settingValues      = new Dictionary <string, ISettingValue>();

            //用默认值填充所有设置。
            foreach (var setting in _settingDefinitionManager.GetAllSettingDefinitions())
            {
                settingDefinitions[setting.Name] = setting;
                settingValues[setting.Name]      = new SettingValueObject(setting.Name, setting.DefaultValue);
            }

            //覆盖应用程序设置
            if (scopes.HasFlag(SettingScopes.Application))
            {
                foreach (var settingValue in await GetAllSettingValuesForApplicationAsync())
                {
                    var setting = settingDefinitions.GetOrDefault(settingValue.Name);

                    //TODO: 条件变得复杂,试着简化它
                    if (setting == null || !setting.Scopes.HasFlag(SettingScopes.Application))
                    {
                        continue;
                    }

                    if (!setting.IsInherited &&
                        setting.Scopes.HasFlag(SettingScopes.User) && !string.IsNullOrWhiteSpace(SharePlatformSession.UserId))
                    {
                        continue;
                    }

                    settingValues[settingValue.Name] = new SettingValueObject(settingValue.Name, settingValue.Value);
                }
            }

            //覆盖用户设置
            if (scopes.HasFlag(SettingScopes.User) && !string.IsNullOrWhiteSpace(SharePlatformSession.UserId))
            {
                foreach (var settingValue in await GetAllSettingValuesForUserAsync(SharePlatformSession.ToUserIdentifier()))
                {
                    var setting = settingDefinitions.GetOrDefault(settingValue.Name);
                    if (setting != null && setting.Scopes.HasFlag(SettingScopes.User))
                    {
                        settingValues[settingValue.Name] = new SettingValueObject(settingValue.Name, settingValue.Value);
                    }
                }
            }

            return(settingValues.Values.ToImmutableList());
        }
 public void TestSession()
 {
     SharePlatformSession.ShouldNotBe(null);
     SharePlatformSession.UserId.ShouldBe("42");
 }