- ABP Framework version: v5.3.0
- UI Type: Angular
- Database System: EF Core (PostgreSQL)
- Tiered (for MVC) or Auth Server Separated (for Angular): no
I've got some settings defined in appSettings.json in my HttpApi.Host project and I have also defined a SettingDefinitionProvider to make them visible to clients (I assume that's what I have to do from reading the Settings documentation).
The SettingsProvider can't find the settings by name, do I have to define them somewhere else as well?
public class AzureSettingsProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
var clientId = context.GetOrNull("Azure.B2C.ClientId");
clientId.IsVisibleToClients = true;
var tenant = context.GetOrNull("Azure.B2C.Tenant");
tenant.IsVisibleToClients = true;
var PasswordEndpoint = context.GetOrNull("Azure.B2C.PasswordEndpoint");
PasswordEndpoint.IsVisibleToClients = true;
var PrimaryDomain = context.GetOrNull("Azure.B2C.PrimaryDomain");
PrimaryDomain.IsVisibleToClients = true;
}
}
Using the ConfigStateService on my Angular client, it isn't getting the values, it always returns undefined.
import { ConfigStateService } from '@abp/ng.core';
constructor(private config: ConfigStateService,
private router: Router,) {
var endpoint = this.config.getOne('Azure.B2C.PasswordEndpoint');
var tenant = this.config.getOne('Azure.B2C.Tenant');
var domain = this.config.getOne('Azure.B2C.PrimaryDomain');
var clientid = this.config.getOne('Azure.B2C.ClientId');
Doesn't matter if I use getOne or getSetting.
What's missing or what have I interpreted wrong?
I've tested this approach with 'Abp.Mailing.Smtp.Host' and the value appears so I don't know what's missing for the settings I've named myself.
9 Answer(s)
-
0
Hi,
Could you please share the full steps to reproduce? I will check it.
-
0
There's not much else to tell really.
- Make a setting in appSettings.json for your HttpApi.Host project
- Make a SettingsDefinitionProvider and retrieve the setting so you can set it's field 'IsVisibleToClients' to true.
- Add ConfigStateService to a component in your Angular app.
- Use getSetting to get the value of the setting.
This all worked with the pre-built ABP setting, 'Abp.Mailing.Smtp.Host' but not with one that I've defined.
-
0
I also tried adding a context.Add(new SettingDefinition("SomeSetting", "SomeValue") inside the AzureSettingsProvider.Define method to see if that would show up, still nothing in the Angular side.
-
0
Hi,
I could not reproduce the problem.
Here is how ABP defines settings you can check. https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSettingProvider.cs#L11
I will check if you can share a simple project with me via mail. shiwei.liang@volosoft.com
-
0
Did you do it in version 5.3.0? Did you define a new setting name, not a default part of the ABP framework? Did you do it in appSettings.json?
-
0
yes
-
0
Ok, created a new Acme.Bookstore solution from scratch and made the changes
My provider looks like this:
using Volo.Abp.Settings; namespace Acme.BookStore.Provider { public class SettingsProvider : SettingDefinitionProvider { public override void Define(ISettingDefinitionContext context) { var test = context.GetOrNull("Abp.Mailing.Smtp.Host"); test.IsVisibleToClients = true; } } }
My appSettings.json like this:
"Settings": { "Abp.Mailing.Smtp.Host": "127.0.0.1" }
That one it finds, sets and shows in the UI.
If I add anything else, even a ABP setting, it can't find the setting in the provider.
Is there something else I have to set up for a Setting other than just putting it in appSettings.json?
-
0
Hi,
I could not reproduce the problem.
Here is how ABP defines settings you can check. https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSettingProvider.cs#L11
I will check if you can share a simple project with me via mail. shiwei.liang@volosoft.com
My sample HttpApi.Host project zipped is 37MB I don't think I can email that.
-
0
Ok got it working like this
context.Add(new SettingDefinition("Volo.Abp.LeptonTheme.Style", isVisibleToClients: true));