private void StopService() { _processorManagers.AsParallel().ForEach(p => p.Stop()); var discordClient = _container.GetInstance <DiscordSocketClient>(); DiscordClientInitializer.Disconnect(discordClient).Wait(); LogManager.Shutdown(); }
private void BuildContainer() { var configuration = Configuration.LoadConfiguration(); _container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle(); _container.RegisterConditional(typeof(ILogger), context => typeof(NLogProxy <>).MakeGenericType(context.Consumer.ImplementationType), Lifestyle.Singleton, context => true); _container.Register <IConfiguration>(() => configuration, Lifestyle.Singleton); _container.Register <IWoWClientConfiguration>(() => configuration.WoW, Lifestyle.Singleton); _container.Register <IDiscordConfiguration>(() => configuration.Discord, Lifestyle.Singleton); _container.Register <IDiscorMemberConfiguration>(() => configuration.Discord.MemberChangeConfiguration, Lifestyle.Singleton); _container.Register <IExplorer>(() => { var config = _container.GetInstance <IWoWClientConfiguration>(); return(new WowExplorer(config.Region, config.Locale, config.ClientId)); }, Lifestyle.Scoped); _container.Register <IRepository, BotContext>(Lifestyle.Transient); _container.RegisterSingleton <Func <IRepository> >(() => _container.GetInstance <IRepository>()); _container.RegisterCollection <IProcessor>(new[] { Assembly.GetExecutingAssembly() }); _container.RegisterSingleton <IServiceProvider>(() => _container); _container.RegisterSingleton <IMetricStringDistance, Damerau>(); _container.Register(typeof(IDiscordMessageBuilder <>), new[] { typeof(IDiscordMessageBuilder <>).Assembly }, Lifestyle.Singleton); _container.Register(typeof(IDiscordMessageSender <>), new[] { typeof(IDiscordMessageSender <>).Assembly }, Lifestyle.Singleton); _container.RegisterSingleton(() => new CommandService(new CommandServiceConfig { CaseSensitiveCommands = false, DefaultRunMode = RunMode.Async })); _container.RegisterSingleton <CommandHandler>(); _container.RegisterSingleton(() => DiscordClientInitializer.Initialize(_container).Result); _container.GetRegistration(typeof(IRepository)) .Registration .SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, "Handled by application code"); _container.Verify(); Target.Register <DiscordPrivateMessageTarget>("DiscordPrivateMessage"); ConfigurationItemFactory.Default.CreateInstance = type => _container.GetRegistration(type)?.GetInstance() ?? Activator.CreateInstance(type); }