StaticRoutesXmlConfigurationBuilderExtension Class
Extension class adding StaticRoutes.xml file reading to the IConfigurationBuilder.
Inheritance Hierarchy
System.Object
TwinCAT.Ads.Configuration.StaticRoutesXmlConfigurationBuilderExtension
Namespace: TwinCAT.Ads.Configuration
Assembly: TwinCAT.Ads.ConfigurationProviders (in TwinCAT.Ads.ConfigurationProviders.dll) Version: 7.0.0+e56d35ccc4675faac24789a4aab60071fc61d470
Syntax
C#
public static class StaticRoutesXmlConfigurationBuilderExtensionThe StaticRoutesXmlConfigurationBuilderExtension type exposes the following members.
Methods
|
|
Name |
Description |
|---|---|---|
|
|
Adds the contents of the StaticRoutes.xml file(s) and routes subfolder into the configuration. |
Remarks
Example
Enhanced Logging/Configuration approach with HostBuilder
class Program
{
static ILogger s_logger = null;
public static void Main(string[] args)
{
// Create Build and run a Host Builder that runs the ServerWorker Hosted Service
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
//https://learn.microsoft.com/en-us/dotnet/core/extensions/logging?tabs=command-line
//https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration
var hostBuilder = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ServerWorker>();
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Add Configuration providers here ...
//config.Sources.Clear(); // Clear all default config sources
// Different options for configuration
//config.AddEnvironmentVariables(); // Use Environment variables
//config.AddCommandLine(args); // Use Command Line
//config.AddJsonFile("appSettings.json"); // Use AppSettings configuration file as config
//config.AddStaticRoutesXmlConfiguration(null); // Use configuration from StaticRoutes.Xml
})
.ConfigureLogging((context, logging) =>
{
// Create specific Ads Logger configuration for formatted output
AdsLoggerConfiguration loggerConfig = AdsLoggerConfiguration.CreateFromConfiguration(context.Configuration);
// Overwrites the configured Loglevel programatically
// loggerConfig.LogLevel = LogLevel.Debug;
logging.ClearProviders();
// Adding console logging here.
logging.AddProvider(new AdsLoggerProvider(() => loggerConfig)); // Adds the AdsLoggerProvider to logging providers
logging.SetMinimumLevel(LogLevel.Debug);
});
return hostBuilder;
}
public class ServerWorker : BackgroundService
{
private ILoggerFactory _loggerFactory;
private ILogger<ServerWorker> _logger;
private IConfiguration _configuration;
public ServerWorker(ILoggerFactory loggerFactory, IConfiguration configuration)
{
// This is called by the Host (Dependency injection)
_configuration = configuration;
_loggerFactory = loggerFactory;
if (_loggerFactory != null)
{
_logger = _loggerFactory.CreateLogger<ServerWorker>();
}
}
protected override async Task ExecuteAsync(CancellationToken cancel)
{
AdsSampleServer server1 = new AdsSampleServer(666, "TestAdsServer1", _loggerFactory);
AdsSampleServer server2 = new AdsSampleServer(999, "TestAdsServer2", _loggerFactory);
Task[] serverTasks = new Task[2];
serverTasks[0] = Task.Run(async () =>
{
await server1.ConnectServerAndWaitAsync(cancel);
});
serverTasks[1] = Task.Run(async () =>
{
await server2.ConnectServerAndWaitAsync(cancel);
});
Task shutdownTask = Task.Run(async () =>
{
await Task.WhenAll(serverTasks);
_logger.LogInformation("All AdsServers closed down.!");
});
Console.WriteLine("Press enter to shutdown servers ...");
Console.ReadLine();
server1.Disconnect();
server2.Disconnect();
await shutdownTask; // Wait for Shutdown of both Servers
}
}
}See Also
Reference
TwinCAT.Ads.Configuration Namespace StaticRoutesXmlConfigurationProvider StaticRoutesXmlConfigurationSource IConfigurationBuilder