public RollingBlobWriter(IBlobNamingStrategy namingStrategy,
                                 IColdStorageInstrumentationPublisher instrumentationPublisher,
                                 CloudStorageAccount storageAccount,
                                 string containerName,
                                 int rollSizeMb,
                                 int blocksAllowed = MaxBlocksAllowed,
                                 int blockSize     = MaxBlockSize)
        {
            Guard.ArgumentNotNullOrEmpty(containerName, "containerName");
            Guard.ArgumentGreaterOrEqualThan(1, blocksAllowed, "blocksAllowed");
            Guard.ArgumentLowerOrEqualThan(MaxBlocksAllowed, blocksAllowed, "blocksAllowed");
            Guard.ArgumentGreaterOrEqualThan(1, blockSize, "blockSize");
            Guard.ArgumentLowerOrEqualThan(MaxBlockSize, blockSize, "blockSize");
            Guard.ArgumentGreaterOrEqualThan(1, rollSizeMb, "rollSizeMb");
            Guard.ArgumentNotNull(instrumentationPublisher, "instrumentationPublisher");

            _rollSizeBytes = rollSizeMb * (long)MegaBytes;
            Guard.ArgumentLowerOrEqualThan(blocksAllowed * (long)blockSize, _rollSizeBytes, "rollSizeMb");

            _blobClient               = storageAccount.CreateCloudBlobClient();
            _containerName            = containerName;
            _namingStrategy           = namingStrategy;
            _instrumentationPublisher = instrumentationPublisher;
            _blocksAllowed            = blocksAllowed;
            _blockSize = blockSize;
        }
        public RollingBlobWriter(IBlobNamingStrategy namingStrategy,
            IColdStorageInstrumentationPublisher instrumentationPublisher,
            CloudStorageAccount storageAccount,
            string containerName,
            int rollSizeMb,
            int blocksAllowed = MaxBlocksAllowed,
            int blockSize = MaxBlockSize)
        {
            Guard.ArgumentNotNullOrEmpty(containerName, "containerName");
            Guard.ArgumentGreaterOrEqualThan(1, blocksAllowed, "blocksAllowed");
            Guard.ArgumentLowerOrEqualThan(MaxBlocksAllowed, blocksAllowed, "blocksAllowed");
            Guard.ArgumentGreaterOrEqualThan(1, blockSize, "blockSize");
            Guard.ArgumentLowerOrEqualThan(MaxBlockSize, blockSize, "blockSize");
            Guard.ArgumentGreaterOrEqualThan(1, rollSizeMb, "rollSizeMb");
            Guard.ArgumentNotNull(instrumentationPublisher, "instrumentationPublisher");

            _rollSizeBytes = rollSizeMb * (long)MegaBytes;
            Guard.ArgumentLowerOrEqualThan(blocksAllowed * (long)blockSize, _rollSizeBytes, "rollSizeMb");

            _blobClient = storageAccount.CreateCloudBlobClient();
            _containerName = containerName;
            _namingStrategy = namingStrategy;
            _instrumentationPublisher = instrumentationPublisher;
            _blocksAllowed = blocksAllowed;
            _blockSize = blockSize;
        }