Skip to content

View Components

Setting Provider

This document provides best practices for implementing setting page view components;

1) Define the View Component Class

public class <ModuleName>SettingGroupViewComponent : AbpViewComponent
{
    // Only inject necessary services
    protected I<ModuleName>SettingAppService <ModuleName>SettingAppService { get; }
    ...

    public <ModuleName>SettingGroupViewComponent(ISettingAppService <moduleName>SettingAppService, ...)
    {
        <ModuleName>SettingAppService = <moduleName>SettingAppService;
        ....
    }
}

2) Implement the InvokeAsync Method

public virtual async Task<IViewComponentResult> InvokeAsync()
{
    // Always use local variables for request-specific data
    var settingsViewModel = new SettingViewModel
    {
        BasicSettings = await <ModuleName>SettingAppService.GetBasicAsync()
    };

    // Conditionally load feature-specific settings
    if (await FeatureChecker.IsEnabledAsync(<ModuleName>FeatureFlags.AdvancedFeature))
    {
        settingsViewModel.AdvancedSettings = await <ModuleName>SettingAppService.GetAdvancedAsync();
    }

    return View("~/Pages/<ModuleName>/Components/<ModuleName>SettingGroup/Default.cshtml", settingsViewModel);
}

3) Define the View Model as Nested Class

public class <ModuleName>SettingViewModel
{
    public BasicSettingsDto BasicSettings { get; set; }
    public AdvancedSettingsDto AdvancedSettings { get; set; }
    // Add other setting DTOs as needed
}