public CoreIdGenerator(IConfiguration config)
        {
            var storageConnection = config.GetSection("ConnectionStrings:AzureBlobStorage").Get <BlobStorageConnection>();
            var batchSize         = config.GetValue <int>("IdGeneratorBatchSize");

            _cloudStorageAccount = Microsoft.Azure.Storage.CloudStorageAccount.Parse(storageConnection.ConnectionString);
            _containerName       = storageConnection.ContainerName;

            _dataStore = BlobOptimisticDataStore.CreateAsync(_cloudStorageAccount, _containerName).Result;
            _generator = new UniqueIdGenerator(_dataStore)
            {
                BatchSize = batchSize
            };
        }
Esempio n. 2
0
        public void ConfigureServices(IServiceCollection services)
        {
            // Enable header based versioning
            services.AddApiVersioning(o =>
            {
                o.ReportApiVersions = true;
                o.AssumeDefaultVersionWhenUnspecified = true;
                o.DefaultApiVersion = new ApiVersion(1, 0);
                o.ApiVersionReader  = new HeaderApiVersionReader("api-version");
            })
            .AddSwaggerGen(setupAction =>
            {
                setupAction.SwaggerDoc("v1", new OpenApiInfo {
                    Title = APIName, Version = "v1"
                });

                var xmlCommentsFile     = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlCommentsFullPath = Path.Combine(AppContext.BaseDirectory, xmlCommentsFile);

                setupAction.IncludeXmlComments(xmlCommentsFullPath);
            })
            .AddServicesRegistrations()
            .AddRepositoriesRegistrations()
            .AddProvidersRegistrations()
            // SQL Server configuration
            .AddDbContext <AppDBContext>(opts => opts.UseSqlServer(Configuration.GetConnectionString("UrlShortnerDB")))
            // IOptimisticDataStore for SnowMaker
            .AddSingleton <IOptimisticDataStore>(sp =>
            {
                var cloudStorageAccount = CloudStorageAccount.Parse(Configuration["AppSettings:SnowMakerConfiguration:StorageAccountConnection"]);

                // I know it is bad practice but as per my knowledge there is no support for async resolve option in Microsoft DI
                return(BlobOptimisticDataStore.CreateAsync(cloudStorageAccount, UniqueKeysStorageContainerName).Result);
            })
            //SnowMaker UniqueIdGenerator
            .AddSingleton <IUniqueIdGenerator>(sp =>
            {
                var dataStore = sp.GetService <IOptimisticDataStore>();
                if (dataStore != null)
                {
                    return(new UniqueIdGenerator(dataStore));
                }

                return(null);
            });

            services.AddAutoMapper(typeof(Startup));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
Esempio n. 3
0
 protected override async Task <IOptimisticDataStore> BuildStoreAsync(TestScope scope)
 {
     return(await BlobOptimisticDataStore.CreateAsync(storageAccount, scope.ContainerName));
 }