Created
February 7, 2019 12:06
-
-
Save icebeam7/f583b5e80ace07bea9c00a40d3ed13dd to your computer and use it in GitHub Desktop.
WeatherBotv4 - Startup.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) Microsoft Corporation. All rights reserved. | |
// Licensed under the MIT License. | |
using System; | |
using System.Linq; | |
using Microsoft.AspNetCore.Builder; | |
using Microsoft.AspNetCore.Hosting; | |
using Microsoft.Bot.Builder; | |
using Microsoft.Bot.Builder.Integration; | |
using Microsoft.Bot.Builder.Integration.AspNet.Core; | |
using Microsoft.Bot.Configuration; | |
using Microsoft.Bot.Connector.Authentication; | |
using Microsoft.Extensions.Configuration; | |
using Microsoft.Extensions.DependencyInjection; | |
using Microsoft.Extensions.Logging; | |
namespace WeatherBotv4 | |
{ | |
public class Startup | |
{ | |
private ILoggerFactory _loggerFactory; | |
private readonly bool _isProduction; | |
public Startup(IHostingEnvironment env) | |
{ | |
_isProduction = env.IsProduction(); | |
var builder = new ConfigurationBuilder() | |
.SetBasePath(env.ContentRootPath) | |
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) | |
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) | |
.AddEnvironmentVariables(); | |
Configuration = builder.Build(); | |
} | |
public IConfiguration Configuration { get; } | |
public void ConfigureServices(IServiceCollection services) | |
{ | |
var secretKey = Configuration.GetSection("botFileSecret")?.Value; | |
var botFilePath = Configuration.GetSection("botFilePath")?.Value; | |
var botConfig = BotConfiguration.Load(botFilePath ?? @".\WeatherBotv4.bot", secretKey); | |
services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded. ({botConfig})")); | |
var connectedServices = new Services.BotService(botConfig); | |
services.AddSingleton(sp => connectedServices); | |
services.AddSingleton(sp => botConfig); | |
services.AddBot<WeatherBotv4Bot>(options => | |
{ | |
var environment = _isProduction ? "production" : "development"; | |
var service = botConfig.Services.FirstOrDefault(s => s.Type == "endpoint" && s.Name == environment); | |
if (!(service is EndpointService endpointService)) | |
throw new InvalidOperationException($"The .bot file does not contain an endpoint with name '{environment}'."); | |
options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword); | |
ILogger logger = _loggerFactory.CreateLogger<WeatherBotv4Bot>(); | |
options.OnTurnError = async (context, exception) => | |
{ | |
logger.LogError($"Exception caught : {exception}"); | |
await context.SendActivityAsync("Sorry, it looks like something went wrong."); | |
}; | |
IStorage dataStore = new MemoryStorage(); | |
var conversationState = new ConversationState(dataStore); | |
options.State.Add(conversationState); | |
}); | |
} | |
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) | |
{ | |
_loggerFactory = loggerFactory; | |
app.UseDefaultFiles() | |
.UseStaticFiles() | |
.UseBotFramework(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment