Intrinsic Component Configuration: Difference between revisions
No edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
* In .NET console apps: [https://docs.microsoft.com/en-us/dotnet/core/extensions/configuration Configuration in .NET] (Microsoft). | * In .NET console apps: [https://docs.microsoft.com/en-us/dotnet/core/extensions/configuration Configuration in .NET] (Microsoft). | ||
By far, the most commonly used configuration provider will probably the [https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ JSON configuration provider], and you will place your configuration data into the ''appsettings.json'' or ''appsettings.<code>Environment</code>.json'' file (e.g. ''appsettings.Production.json''). | By far, the most commonly used configuration provider will probably the [https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ JSON configuration provider], and you will place your configuration data into the ''appsettings.json'' or ''appsettings.<code>Environment</code>.json'' file (e.g. ''appsettings.Production.json''). | ||
= Naming Conventions = | |||
The key (name) of the configuration section is the full (namespace-qualified) name of the component being configured. For example, parameters for the {{Style=Identifier|EasyUAClient}} component are under the <code>OpcLabs.EasyOpc.UA.EasyUAClient</code> configuration section. | |||
The component parameter name is then the key (name) of the sub-section. For example, the {{Style=Identifier|InstanceParameters}} can be configured under the <code>InstanceParameters</code> sub-section. If the parameter is not an atomic value, but rather a structured object, deeper sub-sections are used as necessary, recursively. | |||
= Example = | |||
Line 28: | Line 35: | ||
}); | }); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Of course, changing the configuration providers *does* require a code change; the configuration providers cannot be changed externally on an application that is already built. | |||
= Component Support = | = Component Support = |
Revision as of 13:43, 18 January 2021
Introduction
The parameters of main QuickOPC components can be configured externally, without you having to write a specific code for it. The external configuration can be provided by multiple means, e.g. settings file (such as appsettings.json), environment variables, or Azure App configuration. This feature allows tweaking of component parameters for experiments, testing, and in production. Its main benefit is that the component parameters can be changed without somebody having to implement the code for it first, and/or without having to change and rebuild the application (which may come really handy if rebuilding the application is not an option for you, e.g. in many restricted production environments).
Where the configuration is read from (the "configuration providers") is determined by the default settings for your application host. For the usual hosts, these defaults are described here:
- In ASP.NET Core: Configuration in ASP.NET Core (Microsoft).
- In .NET console apps: Configuration in .NET (Microsoft).
By far, the most commonly used configuration provider will probably the JSON configuration provider, and you will place your configuration data into the appsettings.json or appsettings.Environment
.json file (e.g. appsettings.Production.json).
Naming Conventions
The key (name) of the configuration section is the full (namespace-qualified) name of the component being configured. For example, parameters for the EasyUAClient component are under the OpcLabs.EasyOpc.UA.EasyUAClient
configuration section.
The component parameter name is then the key (name) of the sub-section. For example, the InstanceParameters can be configured under the InstanceParameters
sub-section. If the parameter is not an atomic value, but rather a structured object, deeper sub-sections are used as necessary, recursively.
Example
Note on Programmatic Component Configuration
The sequence of high-level component configuration evaluation is as follows:
- The values are set to their (constant, documented) defaults (both static and instance members).
- Built-in configuration, if present, is applied (this can involve multiple configuration providers in specific sequence). This affects both the static and instance members of the component.
- If the component supports programmatic component configuration, and the code that creates the component specifies a configuration interface, using a constructor designed for IoC (Inversion of Control), the configuration given by the specified interface is applied (this, again, can involve multiple configuration providers in specific sequence). Only instance members of the component can be configured in this way.
If the programmatic component configuration is used, the initial values (of instance members) that the component will end up using may be different from what you specify using the built-in component configuration feature.
Changing the Configuration Providers
If your application requires a set of configuration providers different from the default, you can configure them differently through IHostBuilder
interface by accessing the result value of StaticHost.GetHostBuilder()
. For example, to support a possibility to configure component parameters by key pairs from INI files, add the following code at the beginning of your program:
StaticHost.GetHostBuilder().ConfigureAppConfiguration((hostingContext, config) =>
{
IHostEnvironment hostEnvironment = hostingContext.HostingEnvironment;
config
.AddIniFile("appsettings.ini", optional: true, reloadOnChange: false)
.AddIniFile($"appsettings.{hostEnvironment.EnvironmentName}.ini",
optional: true, reloadOnChange: false);
});
Of course, changing the configuration providers *does* require a code change; the configuration providers cannot be changed externally on an application that is already built.
Component Support
The built-in component configuration feature is supported by following components, and for the data members listed:
- EasyAEClient
- AdaptableParameters, SharedParameters, InstanceParameters, IsolatedParameters.
- EasyDAClient
- AdaptableParameters, SharedParameters, InstanceParameters, IsolatedParameters.
- EasyUAClient
- AdaptableParameters, SharedParameters, InstanceParameters, IsolatedParameters.
- EasyUASubscriber
- AdaptableParameters, SharedParameters, InstanceParameters, IsolatedParameters.