private static void AddStorage(ContainerBuilder containerBuilder) { var statusStorageConnectionBuilders = new StatusStorageConnectionBuilder[] { new StatusStorageConnectionBuilder(PrimaryStorageAccountName, configuration => configuration.StorageAccount), new StatusStorageConnectionBuilder(SecondaryStorageAccountName, configuration => configuration.StorageAccountSecondary) }; // Add all storages to the container by name. foreach (var statusStorageConnectionBuilder in // Register the primary storage last, so it will be the default and will be used unless a specific storage is referenced. statusStorageConnectionBuilders.OrderBy(b => b.Name == PrimaryStorageAccountName)) { var name = statusStorageConnectionBuilder.Name; containerBuilder .Register(ctx => GetCloudStorageAccount(ctx, statusStorageConnectionBuilder)) .As <CloudStorageAccount>() .Named <CloudStorageAccount>(name); containerBuilder .Register(ctx => { var storageAccount = ctx.ResolveNamed <CloudStorageAccount>(name); return(GetTableWrapper(ctx, storageAccount)); }) .As <ITableWrapper>() .Named <ITableWrapper>(name); containerBuilder .Register(ctx => { var storageAccount = ctx.ResolveNamed <CloudStorageAccount>(name); return(GetCloudBlobContainer(ctx, storageAccount)); }) .As <IContainerWrapper>() .Named <IContainerWrapper>(name); // We need to listen to manual status change updates from each storage. containerBuilder .RegisterType <ManualStatusChangeCollectorProcessor>() .WithParameter(new NamedParameter(StorageAccountNameParameter, name)) .WithParameter(new ResolvedParameter( (pi, ctx) => pi.ParameterType == typeof(ITableWrapper), (pi, ctx) => ctx.ResolveNamed <ITableWrapper>(name))) .As <IEntityCollectorProcessor>(); } }
private static CloudStorageAccount GetCloudStorageAccount(IComponentContext ctx, StatusStorageConnectionBuilder statusStorageConnectionBuilder) { var configuration = ctx.Resolve <StatusAggregatorConfiguration>(); return(CloudStorageAccount.Parse(statusStorageConnectionBuilder.GetConnectionString(configuration))); }