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); }
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); }