public static IContainer UseAssemblyRuleScanning(this IContainer container)
        {
            Assembly applicationServices = ApplicationServiceGenerator.Generate(typeof(Domain.Model._namespace).Assembly);

            var rules = new List<AssemblyScanningRule>
            {
                new AssemblyScanningRule(applicationServices),                                               //for application services
                new AssemblyScanningRule(typeof(Samples.Domain.Workflow._namespace).Assembly),                  //for workflow services
                new AssemblyScanningRule(typeof(Samples.View._namespace).Assembly),                  //for view handlers
                new AssemblyScanningRule(typeof(Samples.View.Querying._namespace).Assembly)                  //for query handlers
            };
            
            var typeProvider = new AssemblyTypesProvider(rules);
            container.Configure(expression => expression.For<IDispatcherTypesProvider>().Use(typeProvider).Singleton());
            
            var handlersProvider = new DefaultDispatcherHandlersProvider(typeProvider);
            container.Configure(expression => expression.For<IDispatcherHandlersProvider>().Use(handlersProvider).Singleton());

            var handlerActionsProvider = new DefaultDispatcherHandlerActionsProvider();
            container.Configure(expression => expression.For<IDispatcherHandlerActionsProvider>().Use(handlerActionsProvider).Singleton());

            var priorityProvider = new DefaultDispatcherPriorityProvider();

            var subscriptionManager = new DispatcherSubscriptionsManager(
                handlersProvider,
                new DefaultDispatcherHandlerDescriptorsBuilder(priorityProvider),
                new DefaultDispatcherHandlerActionDescriptorsBuilder(handlerActionsProvider, priorityProvider)
            );
            container.Configure(expression => expression.For<DispatcherSubscriptionsManager>().Use(subscriptionManager).Singleton());

            return container;
        }