public IrcConnection(IIrcClient ircClient, IMessageBus messageBus, UserManager <SpikeCoreUser> userManager, IrcConnectionConfig botConfig) { _ircClient = ircClient; _messageBus = messageBus; _userManager = userManager; _config = botConfig; Connect(); }
public IServiceProvider ConfigureServices(IServiceCollection services) { if (WebConfig.Enabled) { services.AddSignalR(); services.Configure <CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.Configure <ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; }); services.AddDatabaseDeveloperPageExceptionFilter(); } services.AddDbContext <SpikeCoreDbContext>(options => { options.UseSqlite(Configuration.GetConnectionString("SpikeCoreDbContextConnection")); }); services .AddDefaultIdentity <SpikeCoreUser>(options => { options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; }) .AddRoles <IdentityRole>() .AddEntityFrameworkStores <SpikeCoreDbContext>() .AddDefaultTokenProviders() .AddPasswordlessLoginTokenProvider() .AddUserStore <SpikeCoreUserStore>(); if (WebConfig.Enabled) { services .AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_3_0); services.ConfigureApplicationCookie(options => { // Make sure our [Authorize] annotations bounce people to an access denied, instead of a login. // Users can only login through special URLs generated by the bot. options.LoginPath = "/Identity/Account/AccessDenied"; }); } services.AddHttpClient(); var containerBuilder = new ContainerBuilder(); containerBuilder.Populate(services); var ircConnectionConfig = new IrcConnectionConfig(); Configuration.GetSection("IrcConnection").Bind(ircConnectionConfig); containerBuilder.RegisterInstance(ircConnectionConfig); var moduleConfiguration = new ModuleConfiguration(); Configuration.GetSection("Modules").Bind(moduleConfiguration); containerBuilder.RegisterInstance(moduleConfiguration); containerBuilder .RegisterFoundatio(); // Register this as a singleton so both our modules and ASP.NET infrastructure get the same instance. // Removing this causes our modules and controllers to get different instances of a UserManager, which, // due to EF means that making updates via one is not available to the other. containerBuilder.RegisterType <UserManager <SpikeCoreUser> >() .As <UserManager <SpikeCoreUser> >() .PropertiesAutowired() .SingleInstance(); containerBuilder .RegisterType <IrcConnection>() .As <IIrcConnection>() .SingleInstance(); containerBuilder .RegisterType <IrcClient>() .As <IIrcClient>() .PropertiesAutowired() .SingleInstance(); containerBuilder .RegisterType <SignalRMessageBusConnector>() .As <ISignalRMessageBusConnector>() .SingleInstance(); containerBuilder .RegisterType <LoggingListener>() .SingleInstance(); containerBuilder .RegisterAssemblyTypes(typeof(IModule).Assembly) .Where(t => t.Name.EndsWith("Module")) .As <IModule>() .PropertiesAutowired() .SingleInstance(); var container = containerBuilder.Build(); // Grab an instance of IBot so that it gets activated. // We don't need to keep hold of it, it's a singleton. // Using AutoActivate meant RegisterFoundatio wasn't able to hook Activated before activation. container.Resolve <IIrcConnection>(); // We also need to resolve all of our modules. container.Resolve <IEnumerable <IModule> >(); container.Resolve <LoggingListener>(); return(new AutofacServiceProvider(container)); }