Example #1
0
        public HazelcastHealthCheck(IMessagePublisher messagePublisher, IMessagingClient messagingClient, HazelcastConfig configuration)
        {
            this.messagePublisher = messagePublisher;
            this.messagingClient  = messagingClient;
            this.configuration    = configuration;

            this.hzInstance = GetHazelcastInstance();
        }
Example #2
0
        public static IHostBuilder CreateHostBuilder()
        {
            var hzConfiguration = new HazelcastConfig();
            var emailSettings   = new EmailSettings();

            return(new HostBuilder()
                   .ConfigureAppConfiguration((hostContext, configurationBuilder) =>
            {
                var configurationRoot = configurationBuilder
                                        .AddJsonFile("appsettings.json")
                                        .AddEnvironmentVariables()
                                        .Build();
                configurationRoot.Bind(nameof(HazelcastConfig), hzConfiguration);
                configurationRoot.Bind(nameof(EmailSettings), emailSettings);
            })
                   .ConfigureLogging(loggingBuilder =>
            {
                loggingBuilder.ClearProviders();
                loggingBuilder.UseLog4Net(new FileInfo("log4net.config"));
            })
                   .ConfigureSimpleInjector()
                   .ConfigureContainer <Container>((hostBuilderContext, container) =>
            {
                container.RegisterSingleton(() => hzConfiguration);

                // Register IMessagingClientFactory
                container.RegisterSingleton <IMessagingClientFactory, HazelcastMessagingClientFactory>();

                // Register IMessagingClient
                container.RegisterSingleton(() =>
                {
                    var config = container.GetInstance <IConfiguration>();
                    var factory = container.GetInstance <IMessagingClientFactory>();
                    return factory.CreateClient(nameof(HazelcastConfig), config);
                });

                // Register IMessagePublisher
                container.RegisterSingleton <IMessagePublisher>(container.GetInstance <IMessagingClient>);

                // Register IMessageSubscriber
                container.RegisterSingleton <IMessageSubscriber>(container.GetInstance <IMessagingClient>);

                // Register data context
                container.RegisterSingleton(() => new OrganizationServiceDataContextFactory {
                    LoggerFactory = container.GetInstance <ILoggerFactory>()
                });

                //Register Email Service
                container.RegisterSingleton(() => new EmailService(emailSettings));

                container.RegisterScoped(() =>
                {
                    var factory = container.GetInstance <OrganizationServiceDataContextFactory>();
                    var connectionString = hostBuilderContext.Configuration.GetConnectionString(nameof(OrganizationServiceDataContext));
                    return factory.CreateDbContext(connectionString);
                });

                // Register repositories
                DependencyInjectionRegistration.RegisterRepositories(container);

                // Register services
                DependencyInjectionRegistration.RegisterServices(container);

                //Register subscribers
                DependencyInjectionRegistration.RegisterSubscribers(container);

                //Register healthchecks
                DependencyInjectionRegistration.RegisterHealthChecks(container);
            })
                   .AddGrpcService <ProfileController>()
                   .AddGrpcService <OrganizationController>()
                   .AddGrpcService <OrganizationUserController>()
                   .AddGrpcService <GroupController>()
                   .AddGrpcService <GroupAuthorizationController>()
                   .AddGrpcService <AuthorizationController>()
                   .AddGrpcService <UserInvitationController>()
                   .AddGrpcService <HealthController>()
                   .ConfigureGrpcServer(
                       Assembly.GetEntryAssembly().GetName().Name,
                       (hostBuilderContext) =>
            {
                var config = new TracingConfig();
                hostBuilderContext.Configuration.Bind(nameof(TracingConfig), config);
                return config;
            },
                       (hostBuilderContext, c, logger, serverServiceDefinitions, interceptors) =>
            {
                var server = new Server();
                var config = new GrpcConfig();

                hostBuilderContext.Configuration.Bind(nameof(GrpcConfig), config);

                server.Ports.Add(new ServerPort(config.Host, config.Port, ServerCredentials.Insecure));

                GrpcEnvironment.SetLogger(logger);

                serverServiceDefinitions
                .ToList()
                .ForEach(x => { server.Services.Add(x.Intercept(interceptors.ToArray())); });

                return server;
            })
                   .ConfigureContainer <Container>(container => container.Verify()));
        }