12 KiB
Módulo de Gerenciamento de Configurações
O Módulo de Gerenciamento de Configurações implementa a interface ISettingStore (consulte o sistema de configurações) para armazenar os valores das configurações em um banco de dados e fornece a interface ISettingManager para gerenciar (alterar) os valores das configurações no banco de dados.
O módulo de Gerenciamento de Configurações já está instalado e configurado nos modelos de inicialização. Portanto, na maioria das vezes, você não precisa adicionar manualmente este módulo à sua aplicação.
ISettingManager
ISettingManager é usado para obter e definir os valores das configurações. Exemplos:
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SettingManagement;
namespace Demo
{
public class MyService : ITransientDependency
{
private readonly ISettingManager _settingManager;
// Injeta o serviço ISettingManager
public MyService(ISettingManager settingManager)
{
_settingManager = settingManager;
}
public async Task FooAsync()
{
Guid user1Id = ...;
Guid tenant1Id = ...;
// Obtém/define um valor de configuração para o usuário atual ou para o usuário especificado
string layoutType1 =
await _settingManager.GetOrNullForCurrentUserAsync("App.UI.LayoutType");
string layoutType2 =
await _settingManager.GetOrNullForUserAsync("App.UI.LayoutType", user1Id);
await _settingManager.SetForCurrentUserAsync("App.UI.LayoutType", "LeftMenu");
await _settingManager.SetForUserAsync(user1Id, "App.UI.LayoutType", "LeftMenu");
// Obtém/define um valor de configuração para o locatário atual ou para o locatário especificado
string layoutType3 =
await _settingManager.GetOrNullForCurrentTenantAsync("App.UI.LayoutType");
string layoutType4 =
await _settingManager.GetOrNullForTenantAsync("App.UI.LayoutType", tenant1Id);
await _settingManager.SetForCurrentTenantAsync("App.UI.LayoutType", "LeftMenu");
await _settingManager.SetForTenantAsync(tenant1Id, "App.UI.LayoutType", "LeftMenu");
// Obtém/define um valor de configuração global e padrão
string layoutType5 =
await _settingManager.GetOrNullGlobalAsync("App.UI.LayoutType");
string layoutType6 =
await _settingManager.GetOrNullDefaultAsync("App.UI.LayoutType");
await _settingManager.SetGlobalAsync("App.UI.LayoutType", "TopMenu");
}
}
}
Portanto, você pode obter ou definir um valor de configuração para diferentes provedores de valores de configuração (Padrão, Global, Usuário, Locatário... etc).
Use a interface
ISettingProviderem vez daISettingManagerse você apenas precisa ler os valores das configurações, pois ela implementa o cache e suporta todos os cenários de implantação. Você pode usar aISettingManagerse estiver criando uma interface de gerenciamento de configurações.
Cache de Configurações
Os valores das configurações são armazenados em cache usando o sistema de cache distribuído. Sempre use o ISettingManager para alterar os valores das configurações, pois ele gerencia o cache para você.
Provedores de Gerenciamento de Configurações
O módulo de Gerenciamento de Configurações é extensível, assim como o sistema de configurações. Você pode estendê-lo definindo provedores de gerenciamento de configurações. Existem 5 provedores de gerenciamento de configurações pré-construídos registrados na seguinte ordem:
DefaultValueSettingManagementProvider: Obtém o valor do valor padrão da definição da configuração. Ele não pode definir o valor padrão, pois os valores padrão são codificados na definição da configuração.ConfigurationSettingManagementProvider: Obtém o valor do serviço IConfiguration. Ele não pode definir o valor de configuração, pois não é possível alterar os valores de configuração em tempo de execução.GlobalSettingManagementProvider: Obtém ou define o valor global (em todo o sistema) para uma configuração.TenantSettingManagementProvider: Obtém ou define o valor da configuração para um locatário.UserSettingManagementProvider: Obtém o valor da configuração para um usuário.
O ISettingManager usa os provedores de gerenciamento de configurações nos métodos de obtenção/definição. Normalmente, cada provedor de gerenciamento de configurações define métodos de extensão no serviço ISettingManagement (como SetForUserAsync definido pelo provedor de gerenciamento de configurações de usuário).
Se você deseja criar seu próprio provedor, implemente a interface ISettingManagementProvider ou herde da classe base SettingManagementProvider:
public class CustomSettingProvider : SettingManagementProvider, ITransientDependency
{
public override string Name => "Custom";
public CustomSettingProvider(ISettingManagementStore store)
: base(store)
{
}
}
A classe base SettingManagementProvider faz a implementação padrão (usando o ISettingManagementStore) para você. Você pode substituir os métodos base conforme necessário. Todo provedor deve ter um nome exclusivo, que é Custom neste exemplo (mantenha-o curto, pois ele é salvo no banco de dados para cada registro de valor de configuração).
Depois de criar sua classe de provedor, você deve registrá-la usando a classe de opções SettingManagementOptions options class:
Configure<SettingManagementOptions>(options =>
{
options.Providers.Add<CustomSettingProvider>();
});
A ordem dos provedores é importante. Os provedores são executados na ordem inversa. Isso significa que o CustomSettingProvider é executado primeiro neste exemplo. Você pode inserir seu provedor em qualquer ordem na lista Providers.
Veja também
Interface de Gerenciamento de Configurações
O módulo de Gerenciamento de Configurações fornece a interface de configuração de e-mail por padrão.
Você pode clicar no botão Enviar e-mail de teste para enviar um e-mail de teste e verificar suas configurações de e-mail.
Ele é extensível; você pode adicionar suas guias a esta página para as configurações de sua aplicação.
Interface de Usuário MVC
Criar um Componente de Visualização de Configuração
Crie a pasta MySettingGroup dentro da pasta Components. Adicione um novo componente de visualização. Nomeie-o como MySettingGroupViewComponent:
Abra o arquivo MySettingGroupViewComponent.cs e altere todo o conteúdo conforme mostrado abaixo:
public class MySettingGroupViewComponent : AbpViewComponent
{
public virtual IViewComponentResult Invoke()
{
return View("~/Components/MySettingGroup/Default.cshtml");
}
}
Você também pode usar o método
InvokeAsync, neste exemplo, usamos o métodoInvoke.
Default.cshtml
Crie um arquivo Default.cshtml dentro da pasta MySettingGroup.
Abra o arquivo Default.cshtml e altere todo o conteúdo conforme mostrado abaixo:
<div>
<p>Página do meu grupo de configurações</p>
</div>
BookStoreSettingPageContributor
Crie um arquivo BookStoreSettingPageContributor.cs dentro da pasta Settings:
O conteúdo do arquivo é mostrado abaixo:
public class BookStoreSettingPageContributor : ISettingPageContributor
{
public Task ConfigureAsync(SettingPageCreationContext context)
{
context.Groups.Add(
new SettingPageGroup(
"Volo.Abp.MySettingGroup",
"MySettingGroup",
typeof(MySettingGroupViewComponent),
order : 1
)
);
return Task.CompletedTask;
}
public Task<bool> CheckPermissionsAsync(SettingPageCreationContext context)
{
// Você pode verificar as permissões aqui
return Task.FromResult(true);
}
}
Abra o arquivo BookStoreWebModule.cs e adicione o seguinte código:
Configure<SettingManagementPageOptions>(options =>
{
options.Contributors.Add(new BookStoreSettingPageContributor());
});
Executar a Aplicação
Acesse a rota /SettingManagement para ver as alterações:
Interface de Usuário Blazor
Criar um Componente Razor
Crie a pasta MySettingGroup dentro da pasta Pages. Adicione um novo componente Razor. Nomeie-o como MySettingGroupComponent:
Abra o arquivo MySettingGroupComponent.razor e altere todo o conteúdo conforme mostrado abaixo:
<Row>
<p>meu grupo de configurações</p>
</Row>
BookStoreSettingComponentContributor
Crie um arquivo BookStoreSettingComponentContributor.cs dentro da pasta Settings:
O conteúdo do arquivo é mostrado abaixo:
public class BookStoreSettingComponentContributor : ISettingComponentContributor
{
public Task ConfigureAsync(SettingComponentCreationContext context)
{
context.Groups.Add(
new SettingComponentGroup(
"Volo.Abp.MySettingGroup",
"MySettingGroup",
typeof(MySettingGroupComponent),
order : 1
)
);
return Task.CompletedTask;
}
public Task<bool> CheckPermissionsAsync(SettingComponentCreationContext context)
{
// Você pode verificar as permissões aqui
return Task.FromResult(true);
}
}
Abra o arquivo BookStoreBlazorModule.cs e adicione o seguinte código:
Configure<SettingManagementComponentOptions>(options =>
{
options.Contributors.Add(new BookStoreSettingComponentContributor());
});
Executar a Aplicação
Acesse a rota /setting-management para ver as alterações:
Interface de Usuário Angular
Criar um Componente
Crie um componente com o seguinte comando:
yarn ng generate component my-settings
Abra o arquivo app.component.ts e modifique o arquivo conforme mostrado abaixo:
import { Component } from '@angular/core';
import { SettingTabsService } from '@abp/ng.setting-management/config'; // importando SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // importando MySettingsComponent
@Component(/* metadados do componente */)
export class AppComponent {
constructor(private settingTabs: SettingTabsService) // injetando MySettingsComponent
{
// adicionado abaixo
settingTabs.add([
{
name: 'MySettings',
order: 1,
requiredPolicy: 'chave da política aqui',
component: MySettingsComponent,
},
]);
}
}
Executar a Aplicação
Acesse a rota /setting-management para ver as alterações:







