Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用SettingDefinitionGroup?_C#_Asp.net Mvc_Asp.net Core_Settings_Aspnetboilerplate - Fatal编程技术网

C# 如何使用SettingDefinitionGroup?

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”; 公共静态类基础数据{ 公共静态类公司

我使用免费的,这是基于。 该模板已实现,您可以在其中为应用程序或用户范围添加必要的设置,如上所示。问题是我需要使用大量的设置,这对分组是有意义的。要做到这一点,该类具有。但是如何使用它呢?声明这只是用于UI中,但没有给出其使用示例

例如,有这样一种设置结构:

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;