コード例 #1
0
ファイル: Service.cs プロジェクト: Sephiroth018/WoWDiscordBot
        private void StopService()
        {
            _processorManagers.AsParallel().ForEach(p => p.Stop());

            var discordClient = _container.GetInstance <DiscordSocketClient>();

            DiscordClientInitializer.Disconnect(discordClient).Wait();

            LogManager.Shutdown();
        }
コード例 #2
0
ファイル: Service.cs プロジェクト: Sephiroth018/WoWDiscordBot
        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);
        }