in templates/csharp/Skill/Skill/Startup.cs [48:140]
public void ConfigureServices(IServiceCollection services)
{
// Configure MVC
services.AddControllers().AddNewtonsoftJson();
// Configure server options
services.Configure<KestrelServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
// Load settings
var settings = new BotSettings()
{
LogPersonalData = Configuration.GetSection("logPersonalInfo")?.Value.ToLower() == "true"
};
Configuration.Bind(settings);
services.AddSingleton(settings);
services.AddSingleton<BotSettingsBase>(settings);
// Configure channel provider
services.AddSingleton<IChannelProvider, ConfigurationChannelProvider>();
// Register AuthConfiguration to enable custom claim validation.
services.AddSingleton(sp => new AuthenticationConfiguration
{
ClaimsValidator = new AllowedCallersClaimsValidator(sp.GetService<IConfiguration>().GetSection("allowedCallers").Get<List<string>>())
});
// Configure configuration provider
services.AddSingleton<ICredentialProvider, ConfigurationCredentialProvider>();
// Configure telemetry
services.AddApplicationInsightsTelemetry();
services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>();
services.AddSingleton<ITelemetryInitializer, OperationCorrelationTelemetryInitializer>();
services.AddSingleton<ITelemetryInitializer, TelemetryBotIdInitializer>();
services.AddSingleton<TelemetryInitializerMiddleware>();
if (settings.LogPersonalData)
{
services.AddSingleton<TelemetryLoggerMiddleware>(s => new TelemetryLoggerMiddleware(s.GetService<IBotTelemetryClient>(), true));
}
else
{
services.AddSingleton<TelemetryLoggerMiddleware>();
}
// Configure bot services
services.AddSingleton<BotServices>();
// Configure storage
// Uncomment the following line for local development without Cosmos Db
// services.AddSingleton<IStorage>(new MemoryStorage());
services.AddSingleton<IStorage>(new CosmosDbPartitionedStorage(settings.CosmosDb));
services.AddSingleton<UserState>();
services.AddSingleton<ConversationState>();
// Configure proactive
services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
services.AddHostedService<QueuedHostedService>();
// Configure localized responses
var localizedTemplates = new Dictionary<string, string>();
var templateFile = "AllResponses";
var supportedLocales = new List<string>() { "en-us", "de-de", "es-es", "fr-fr", "it-it", "zh-cn" };
foreach (var locale in supportedLocales)
{
// LG template for en-us does not include locale in file extension.
var localeTemplateFile = locale.Equals("en-us")
? Path.Combine(".", "Responses", $"{templateFile}.lg")
: Path.Combine(".", "Responses", $"{templateFile}.{locale}.lg");
localizedTemplates.Add(locale, localeTemplateFile);
}
services.AddSingleton(new LocaleTemplateManager(localizedTemplates, settings.DefaultLocale ?? "en-us"));
// Register dialogs
services.AddTransient<SampleDialog>();
services.AddTransient<SampleAction>();
services.AddTransient<MainDialog>();
// Configure adapters
services.AddSingleton<IBotFrameworkHttpAdapter, DefaultAdapter>();
// Configure bot
services.AddTransient<IBot, DefaultActivityHandler<MainDialog>>();
}