public override void Build()
        {
            var builder           = this as ISettingsBuilder;
            var processorSettings = this as ISubscrptionMiddlewareSettings;
            Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () =>
            {
                var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory);
                var repository     = builder.Container.Resolve <IAggregateRepository>(builder.Name);
                var publisher      = builder.Container.Resolve <IPublisher <IEvent> >(builder.Name);

                //create extension methis UseApplicationMiddleware instead of instance here.
                var applicationServiceMiddleware = new ApplicationServiceMiddleware(handlerFactory, repository, publisher);
                var middleware             = processorSettings.HandleMiddleware(applicationServiceMiddleware);
                var subscriptionMiddleware = new SubscriptionMiddleware();
                foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations)
                {
                    if (typeof(IAggregateRootApplicationService).IsAssignableFrom(reg))
                    {
                        subscriptionMiddleware.Subscribe(new HandleSubscriber <IAggregateRootApplicationService, ICommandHandler <ICommand> >(reg, middleware));
                    }
                }
                return(subscriptionMiddleware);
            };

            builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name);
        }
Example #2
0
        public override void Build()
        {
            var hasher            = new ProjectionHasher();
            var builder           = this as ISettingsBuilder;
            var processorSettings = this as ISubscrptionMiddlewareSettings;
            Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () =>
            {
                var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory);

                var    clusterServiceMiddleware = new SystemMiddleware(handlerFactory);
                var    middleware             = processorSettings.HandleMiddleware(clusterServiceMiddleware);
                var    subscriptionMiddleware = new SubscriptionMiddleware();
                var    clusterSettings        = builder.Container.Resolve <IClusterSettings>();
                string nodeId = $"{clusterSettings.CurrentNodeName}@{clusterSettings.ClusterName}";
                foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations)
                {
                    string subscriberId = reg.FullName + "." + nodeId;
                    if (typeof(ISystemProjection).IsAssignableFrom(reg) && reg.IsClass)
                    {
                        subscriptionMiddleware.Subscribe(new SystemProjectionSubscriber(reg, middleware, subscriberId));

                        var transport     = builder.Container.Resolve <ITransport>(builder.Name);
                        var serializer    = builder.Container.Resolve <ISerializer>(null);
                        var publisher     = transport.GetPublisher <ICommand>(serializer);
                        var projManagerId = new ProjectionVersionManagerId(reg.GetContractId());
                        var command       = new RegisterProjection(projManagerId, hasher.CalculateHash(reg).ToString());
                        publisher.Publish(command);
                    }
                }
                return(subscriptionMiddleware);
            };

            builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name);
        }
Example #3
0
        public override void Build()
        {
            var builder           = this as ISettingsBuilder;
            var processorSettings = this as ISubscrptionMiddlewareSettings;
            Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () =>
            {
                var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory);

                var publisher  = builder.Container.Resolve <IPublisher <IEvent> >(builder.Name);
                var repository = builder.Container.Resolve <IAggregateRepository>(builder.Name);
                var systemServiceMiddleware = new ApplicationServiceMiddleware(handlerFactory, repository, publisher);
                var middleware             = processorSettings.HandleMiddleware(systemServiceMiddleware);
                var subscriptionMiddleware = new SubscriptionMiddleware();
                foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations)
                {
                    if (typeof(ISystemService).IsAssignableFrom(reg) && reg.IsClass)
                    {
                        subscriptionMiddleware.Subscribe(new SystemServiceSubscriber(reg, middleware));
                    }
                }
                return(subscriptionMiddleware);
            };

            builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name);
        }
Example #4
0
        public override void Build()
        {
            var hasher            = new ProjectionHasher();
            var builder           = this as ISettingsBuilder;
            var processorSettings = this as ISubscrptionMiddlewareSettings;
            Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () =>
            {
                var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory);

                //  May be we want to have separate serializer + transport per type?!?!?
                var transport  = builder.Container.Resolve <ITransport>(builder.Name);
                var serializer = builder.Container.Resolve <ISerializer>(null);
                var publisher  = transport.GetPublisher <ICommand>(serializer);

                var projectionsMiddleware  = new ProjectionsMiddleware(handlerFactory);
                var middleware             = processorSettings.HandleMiddleware(projectionsMiddleware);
                var subscriptionMiddleware = new SubscriptionMiddleware();
                var iProjection            = typeof(IProjection);

                foreach (var handler in processorSettings.HandlerRegistrations)
                {
                    if (iProjection.IsAssignableFrom(handler))
                    {
                        subscriptionMiddleware.Subscribe(new HandlerSubscriber <IProjection, IEventHandler <IEvent> >(handler, middleware));
                        var projManagerId = new ProjectionVersionManagerId(handler.GetContractId());
                        var command       = new RegisterProjection(projManagerId, hasher.CalculateHash(handler).ToString());
                        publisher.Publish(command);
                    }
                }
                var indexSubscriber = builder.Container.Resolve <EventTypeIndexForProjections>();
                subscriptionMiddleware.Subscribe(indexSubscriber);
                return(subscriptionMiddleware);
            };

            builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name);
        }
        public override void Build()
        {
            var builder           = this as ISettingsBuilder;
            var processorSettings = this as ISubscrptionMiddlewareSettings;
            Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () =>
            {
                var handlerFactory         = new DefaultHandlerFactory(processorSettings.HandlerFactory);
                var publisher              = builder.Container.Resolve <IPublisher <ICommand> >(builder.Name);
                var portsMiddleware        = new PortsMiddleware(handlerFactory, publisher);
                var middleware             = processorSettings.HandleMiddleware(portsMiddleware);
                var subscriptionMiddleware = new SubscriptionMiddleware();
                foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations)
                {
                    if (typeof(IPort).IsAssignableFrom(reg))
                    {
                        subscriptionMiddleware.Subscribe(new HandleSubscriber <IPort, IEventHandler <IEvent> >(reg, middleware));
                    }
                }
                return(subscriptionMiddleware);
            };

            builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name);
        }