Ejemplo n.º 1
0
 public OrderService(IHttpContextAccessor httpContextAccessor, Basket.API.Grpc.Basket.BasketClient basketClient, OrderDbContext orderDbContext, ICapPublisher capBus)
 {
     _httpContextAccessor = httpContextAccessor;
     _basketClient        = basketClient;
     _orderDbContext      = orderDbContext;
     _capBus = capBus;
 }
        public void ConfigureServices(IServiceCollection services)
        {
            //services.AddDbContext<OrderDbContext>(options =>
            //    options.UseSqlServer(
            //        Configuration.GetConnectionString("OrderConnectionString")));
            services.AddDbContext <OrderDbContext>();
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("sub");

            var identityUrl = Configuration.GetValue <string>("IdentityUrl");

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.Authority            = identityUrl;
                options.RequireHttpsMetadata = false;
                options.Audience             = "order";
            });
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                  builder => builder
                                  .SetIsOriginAllowed((host) => true)
                                  .AllowAnyMethod()
                                  .AllowAnyHeader()
                                  .AllowCredentials());
            });
            services.AddAuthorization();
            services.AddGrpc();
            services.AddResponseCompression(opts =>
            {
                opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                    new[] { "application/octet-stream" });
            });
            services.AddCap(x =>
            {
                x.UseEntityFramework <OrderDbContext>();
                x.UseRabbitMQ("localhost");
                x.FailedRetryCount        = 5;
                x.FailedThresholdCallback = failed =>
                {
                    var aaa =
                        $@"A message of type {failed.MessageType} failed after executing {x.FailedRetryCount} several times, 
                        requiring manual troubleshooting. Message name: {failed.Message.GetName()}";
                };
            });

            services.AddHttpContextAccessor();
            var basketUrl = Configuration.GetValue <string>("BasketUrl");
            var channel   = GrpcChannel.ForAddress(basketUrl);
            var client    = new CleanArchitecture.Services.Basket.API.Grpc.Basket.BasketClient(channel);

            services.AddSingleton(client);
        }