예제 #1
0
        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>();
            }
        }
예제 #2
0
        private static CloudStorageAccount GetCloudStorageAccount(IComponentContext ctx, StatusStorageConnectionBuilder statusStorageConnectionBuilder)
        {
            var configuration = ctx.Resolve <StatusAggregatorConfiguration>();

            return(CloudStorageAccount.Parse(statusStorageConnectionBuilder.GetConnectionString(configuration)));
        }