Esempio n. 1
0
        protected override void ConfigureApplicationContainer(ILifetimeScope existingContainer)
        {
            base.ConfigureApplicationContainer(existingContainer);
            // Register logger
            existingContainer.Update(builder => builder.RegisterInstance(_logger).As <ILogger>());
            var log = existingContainer.Resolve <ILogger>();

            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register logger completed.");

            // Register configuration
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register configuration...");
            existingContainer.Update(builder => builder.RegisterInstance(LoadConfiguration()).As <IConfiguration>());
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register configuration...done.");

            // Register SKAPISetting
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register SKAPI configuration...");
            existingContainer.Configure <SKAPISetting>(existingContainer.Resolve <IConfiguration>().GetSection("SKAPISetting"));
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register SKAPI configuration...done.");

            // Register ConnectionStatusEvent broker.
            existingContainer.Update(builder =>
                                     builder.RegisterInstance(new DataEventBroker <ConnectionStatusEvent>())
                                     .As <DataEventBroker <ConnectionStatusEvent> >());

            // Register SKWrapper
            existingContainer.Update(b => b.RegisterInstance(new SkapiWrapper()).As <SkapiWrapper>());
            var skWrapper = existingContainer.Resolve <SkapiWrapper>();

            skWrapper.InitSkcomLib();

            // Register IFCMAPIConnection
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register Futures Commission Merchant (FCM) API ...");
            existingContainer.Update(builder => builder.RegisterInstance(new SKAPIConnection(
                                                                             existingContainer.Resolve <ILogger>(),
                                                                             skWrapper,
                                                                             existingContainer.Resolve <DataEventBroker <ConnectionStatusEvent> >(),
                                                                             existingContainer.Resolve <IConfiguration>()
                                                                             //existingContainer.Resolve<GCPPubSubSetting>()
                                                                             )).As <IFCMAPIConnection>());
            existingContainer.Resolve <IFCMAPIConnection>().InitAPI();
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register Futures Commission Merchant (FCM) API ...done.");

            // Register HealthAction
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register HealthAction ...");
            existingContainer.Update(builder => builder.RegisterInstance(new HealthAction(
                                                                             existingContainer.Resolve <IFCMAPIConnection>(),
                                                                             existingContainer.Resolve <ILogger>(),
                                                                             existingContainer.Resolve <DataEventBroker <ConnectionStatusEvent> >()
                                                                             )));
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register HealthAction ...done.");

            // Register ScheduleQueue
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register ScheduleServiceClientAction ...");
            existingContainer.Configure <QuoteScheduleSetting>(existingContainer.Resolve <IConfiguration>().GetSection("QuoteScheduleSetting"));

            var quoteScheduleSetting = existingContainer.Resolve <QuoteScheduleSetting>();

            existingContainer.Update(b => b.RegisterInstance(new Channel(quoteScheduleSetting.ScheduleService, ChannelCredentials.Insecure)));
            existingContainer.Update(b => b.RegisterInstance(new ScheduleService.ScheduleServiceClient(
                                                                 existingContainer.Resolve <Channel>()
                                                                 )));
            existingContainer.Update(b => b.RegisterInstance(new ScheduleService.ScheduleServiceClient(
                                                                 existingContainer.Resolve <Channel>()
                                                                 )));
            existingContainer.Update(b => b.RegisterInstance(new Health.HealthClient(
                                                                 existingContainer.Resolve <Channel>()
                                                                 )));

            existingContainer.Update(b => b.RegisterInstance(new ScheduleServiceClientAction(
                                                                 existingContainer.Resolve <ILogger>(),
                                                                 existingContainer.Resolve <ScheduleService.ScheduleServiceClient>(),
                                                                 existingContainer.Resolve <Health.HealthClient>()
                                                                 )));
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register ScheduleServiceClientAction ...done.");

            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register QuoteScheduleQueue ...");
            existingContainer.Update(builder =>
                                     builder.RegisterInstance(new QueueConnectionClient(
                                                                  new RabbitQueueService(log, existingContainer.Resolve <IConfiguration>())
                                                                  )));
            var queueConnectionClient = existingContainer.Resolve <QueueConnectionClient>();

            queueConnectionClient.FanoutReceiver.InitListening(quoteScheduleSetting.ScheduleTopic);
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Register QuoteScheduleQueue ...done.");

            existingContainer.Update(builder => builder.RegisterInstance(new QuoteServiceSchedule(
                                                                             existingContainer.Resolve <IFCMAPIConnection>(),
                                                                             existingContainer.Resolve <ILogger>(),
                                                                             existingContainer.Resolve <ScheduleServiceClientAction>(),
                                                                             existingContainer.Resolve <QueueConnectionClient>()
                                                                             )));


            // Register QuoteService
            existingContainer.Configure <QuoteActionGRPCServerSetting>(existingContainer.Resolve <IConfiguration>().GetSection("QuoteActionGRPCServerSetting"));
            existingContainer.Update(builder => builder.RegisterInstance(new GrpcServer(
                                                                             existingContainer.Resolve <IFCMAPIConnection>(),
                                                                             existingContainer.Resolve <QuoteActionGRPCServerSetting>(),
                                                                             existingContainer.Resolve <ILogger>()
                                                                             )));

            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: Start grpc...");
            var grpc = existingContainer.Resolve <GrpcServer>();

            grpc.Start();
            log.Debug("[CustomBootstrapper.ConfigureApplicationContainer]: DI complete.");
        }