コード例 #1
0
        public GremlinClientFactory(ICosmosGraphDbSettings settings)
        {
            Guard.ArgumentNotNull(settings, nameof(settings));
            Guard.IsNullOrWhiteSpace(settings.EndPointUrl, nameof(settings.EndPointUrl));
            Guard.IsNullOrWhiteSpace(settings.ApiKey, nameof(settings.ApiKey));
            Guard.IsNullOrWhiteSpace(settings.ContainerPath, nameof(settings.ContainerPath));

            _server = new GremlinServer(settings.EndPointUrl,
                                        settings.Port,
                                        true,
                                        settings.ContainerPath,
                                        settings.ApiKey);

            _connectionPoolSettings = new ConnectionPoolSettings()
            {
                MaxInProcessPerConnection = settings.MaxInProcessPerConnection ?? 32,
                PoolSize              = settings.PoolSize ?? 4,
                ReconnectionAttempts  = settings.ReconnectionAttempts ?? 4,
                ReconnectionBaseDelay = TimeSpan.FromMilliseconds(settings.ReconnectionBaseDelay ?? 500)
            };

            _webSocketConfiguration =
                new Action <ClientWebSocketOptions>(options =>
            {
                options.KeepAliveInterval = TimeSpan.FromSeconds(settings.KeepAliveInterval ?? 10);
            });
        }
コード例 #2
0
        public void RegisterComponents(IServiceCollection builder)
        {
            builder.AddSingleton <IUserProfileProvider, UserProfileProvider>();
            builder
            .AddScoped <IHealthChecker, ControllerResolverHealthCheck>();

            builder
            .AddScoped <IGremlinClientFactory, GremlinClientFactory>();
            builder
            .AddScoped <IPathResultsTransform, PathResultsTransform>();
            builder
            .AddScoped <ICosmosGraphDbSettings>(ctx =>
            {
                CosmosGraphDbSettings settings = new CosmosGraphDbSettings();

                Configuration.Bind("CosmosGraphSettings", settings);

                return(settings);
            });

            builder
            .AddScoped <IGraphRepository>(ctx =>
            {
                IGremlinClientFactory gremlinClientFactory = ctx.GetService <IGremlinClientFactory>();
                IPathResultsTransform pathResultsTransform = ctx.GetService <IPathResultsTransform>();
                ICosmosGraphDbSettings settings            = ctx.GetService <ICosmosGraphDbSettings>();

                return(new GraphRepository(gremlinClientFactory, pathResultsTransform, settings.DegreeOfParallelism == 0 ? 15 : settings.DegreeOfParallelism));
            });

            builder
            .AddScoped <ISpecificationRepository, SpecificationRepository>();

            builder
            .AddScoped <ICalculationRepository, CalculationRepository>();

            builder
            .AddScoped <IGraphService, GraphService>();

            builder
            .AddScoped <IDatasetRepository, DatasetRepository>();

            builder
            .AddScoped <IFundingLineRepository, FundingLineRepository>();

            builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration);

            builder.AddHttpContextAccessor();

            builder.AddHealthCheckMiddleware();

            builder.AddApplicationInsightsTelemetry();
            builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Graph");
            builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.Graph");
            builder.AddLogging("CalculateFunding.Api.Graph");

            if (Configuration.IsSwaggerEnabled())
            {
                builder.ConfigureSwaggerServices(title: "Graph Microservice API");
            }
        }