C# 如何使用SettingDefinitionGroup?
我使用免费的,这是基于。 该模板已实现,您可以在其中为应用程序或用户范围添加必要的设置,如上所示。问题是我需要使用大量的设置,这对分组是有意义的。要做到这一点,该类具有。但是如何使用它呢?声明这只是用于UI中,但没有给出其使用示例 例如,有这样一种设置结构:C# 如何使用SettingDefinitionGroup?,c#,asp.net-mvc,asp.net-core,settings,aspnetboilerplate,C#,Asp.net Mvc,Asp.net Core,Settings,Aspnetboilerplate,我使用免费的,这是基于。 该模板已实现,您可以在其中为应用程序或用户范围添加必要的设置,如上所示。问题是我需要使用大量的设置,这对分组是有意义的。要做到这一点,该类具有。但是如何使用它呢?声明这只是用于UI中,但没有给出其使用示例 例如,有这样一种设置结构: namespace ProjectName.Configuration{ 公共静态类AppSettingNames{ public const string UiTheme=“App.UiTheme”; 公共静态类基础数据{ 公共静态类公司
namespace ProjectName.Configuration{
公共静态类AppSettingNames{
public const string UiTheme=“App.UiTheme”;
公共静态类基础数据{
公共静态类公司{
public const string Name=“BaseData.Company.Name”;
// ...
公共静态类后地址{
public const string Country=“BaseData.Company.PostAddress.Country”;
// ...
}
}
公共静态类用户界面{
公共静态类页脚{
public const bool IsVisible=“BaseData.UI.Footer.IsVisible”;
// ...
}
公共静态类小部件{
公众静态天气{
public const bool IsVisible=“BaseData.UI.Widget.IsVisible”;
// ...
}
}
}
}
}
}
在这种情况下,如何在SettingProvider
中指定它并在UI中使用设置组
namespace ProjectName.Configuration{
公共类AppSettingProvider:SettingProvider{
公共重写IEnumerable GetSettingDefinitions(SettingDefinitionProviderContext上下文){
返回新的[]
{
新设置定义(AppSettingNames.UiTheme,
“红色”,
作用域:SettingScopes.Application | SettingScopes.Tenant | SettingScopes.User,
isVisibleToClients:正确
),
/*基础数据*/
新设置定义(AppSettingNames.BaseData.Company.Name,
“默认值”,
displayName:“设置名称”,
description:“设置说明”,
作用域:SettingScopes.Application | SettingScopes.Tenant,
isVisibleToClients:正确,
组:?,?,
clientVisibilityProvider:新要求身份验证设置clientVisibilityProvider()
)
};
}
}
}
它目前还没有被使用,所以要真正使用它还有一些工作要做
配置:
public class AppSettingProvider : SettingProvider
{
// Hold groups
public static List<SettingDefinitionGroup> Groups = new List<SettingDefinitionGroup>();
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
{
// Create groups
var group1 = new SettingDefinitionGroup("group1", new LocalizableString("group1_displayName", "sourceName"));
var group2 = new SettingDefinitionGroup("group2", new LocalizableString("group2_displayName", "sourceName"));
// Add groups
Groups.Add(group1);
Groups.Add(group2);
// Configure hierarchy
group1.AddChild(group2);
return new[]
{
new SettingDefinition(AppSettingNames.UiTheme,
"red",
scopes: SettingScopes.Application | SettingScopes.Tenant | SettingScopes.User,
isVisibleToClients: true
),
// Grouped
new SettingDefinition("setting1_name",
"setting1_defaultValue",
group: group1
),
new SettingDefinition("setting2_name",
"setting2_defaultValue",
group: group2
)
};
}
}
非常感谢!我希望今后正式文件将补充这一信息。
public class SettingGroup
{
public List<SettingGroup> Children { get; set; }
public string Name { get; set; }
public List<ISettingValue> Settings { get; set; }
}
private async Task<SettingGroup> GetSettingGroup(string name)
{
var groupList = AppSettingProvider.Groups.Where(g => g.Name == name).ToList();
var settingDefinitions = _settingDefinitionManager.GetAllSettingDefinitions();
var settings = await SettingManager.GetAllSettingValuesAsync();
return GetSettingGroupsRecursively(groupList, settingDefinitions, settings).FirstOrDefault();
}
private List<SettingGroup> GetSettingGroupsRecursively(IReadOnlyList<SettingDefinitionGroup> groups, IReadOnlyList<SettingDefinition> settingDefinitions, IReadOnlyList<ISettingValue> settings)
{
return groups
.Select(group => new SettingGroup
{
Children = GetSettingGroupsRecursively(group.Children, settingDefinitions, settings),
Name = group.Name,
Settings = GetGroupSettings(group, settingDefinitions, settings)
})
.ToList();
}
private List<ISettingValue> GetGroupSettings(SettingDefinitionGroup group, IReadOnlyList<SettingDefinition> settingDefinitions, IReadOnlyList<ISettingValue> settings)
{
return settingDefinitions
.Where(sd => sd.Group?.Name == group?.Name)
.Select(sd => settings.Where(s => s.Name == sd.Name).FirstOrDefault())
.Where(s => s != null)
.ToList();
}
var group1SettingGroup = await GetSettingGroup("group1");
var group1Settings = group1SettingGroup.Settings;
// Check hierarchy
// var group2SettingGroup = group1SettingGroup.Children.First();
// var group2Settings = group2SettingGroup.Settings;