Skip to content

Instantly share code, notes, and snippets.

Created Feb 7, 2019
What would you like to do?
WeatherBotv4 - Startup.cs
// 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()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
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 ?? @".\", 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);
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
_loggerFactory = loggerFactory;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment