/// <summary>
        /// Register and turn on webpoint. EnableDebugEndpoint application setting should be set to true.
        /// </summary>
        public static void Register(IContainer container)
        {
            var settingValue       = ConfigurationManager.AppSettings.Get("EnableDebugEndpoint");
            var pipelinesContainer = container.Resolve <IMessagePipelineContainer>();

            if (StringUtils.ParseOrDefault(settingValue, false))
            {
                WebEndpoint = new Saritasa.Tools.Messages.Common.Endpoints.WebEndpoint(
                    new AutofacServiceProviderFactory(container));

                WebEndpoint.RegisterPipelines(pipelinesContainer);
                WebEndpoint.Start();
            }

            settingValue = ConfigurationManager.AppSettings.Get("DebugMessagesDir");
            if (!string.IsNullOrEmpty(settingValue) && Directory.Exists(settingValue))
            {
                var fileMessageRepository    = new Saritasa.Tools.Messages.Common.Repositories.FileMessageRepository(settingValue);
                var fileRepositoryMiddleware = new Saritasa.Tools.Messages.Common.PipelineMiddlewares.RepositoryMiddleware(fileMessageRepository);
                foreach (var pipeline in pipelinesContainer.Pipelines)
                {
                    pipeline.AddMiddlewares(fileRepositoryMiddleware);
                }
            }
        }
示例#2
0
        public static IMessagePipelineContainer RegisterPipelines(params IMessagePipelineMiddleware[] middlewares)
        {
            var pipelinesContainer = new DefaultMessagePipelineContainer();

            // Repositories.
            var connectionStringConf = ConfigurationManager.ConnectionStrings["AppDbContext"];
            var connectionString     = connectionStringConf.ConnectionString.Replace("{baseUrl}",
                                                                                     AppDomain.CurrentDomain.BaseDirectory);
            var repositoryMiddleware = new Saritasa.Tools.Messages.Common.PipelineMiddlewares.RepositoryMiddleware(
                new Saritasa.Tools.Messages.Common.Repositories.AdoNetMessageRepository(
                    System.Data.Common.DbProviderFactories.GetFactory(connectionStringConf.ProviderName),
                    connectionString)
                );
            var recordRepositoryMiddleware = new Saritasa.Tools.Messages.Common.PipelineMiddlewares.RepositoryMiddleware(
                new Saritasa.Tools.Messages.Common.Repositories.WebServiceRepository()
                )
            {
                RethrowExceptions = false,
            };

            // Command.
            pipelinesContainer.AddCommandPipeline()
            .AddMiddleware(
                new Saritasa.Tools.Messages.Commands.PipelineMiddlewares.CommandHandlerLocatorMiddleware(
                    System.Reflection.Assembly.GetAssembly(typeof(Domain.UserContext.Entities.User))))
            .AddMiddleware(new Saritasa.Tools.Messages.Commands.PipelineMiddlewares.CommandHandlerResolverMiddleware())
            .AddMiddleware(new Saritasa.Tools.Messages.Commands.PipelineMiddlewares.CommandHandlerExecutorMiddleware
            {
                UseParametersResolve = true
            })
            .AddMiddleware(repositoryMiddleware)
            .AddMiddleware(recordRepositoryMiddleware);

            // Query.
            pipelinesContainer.AddQueryPipeline()
            .AddMiddleware(new Saritasa.Tools.Messages.Queries.PipelineMiddlewares.QueryObjectResolverMiddleware
            {
                UseInternalObjectResolver = true,
            })
            .AddMiddleware(new Saritasa.Tools.Messages.Queries.PipelineMiddlewares.QueryExecutorMiddleware())
            .AddMiddleware(repositoryMiddleware)
            .AddMiddleware(recordRepositoryMiddleware);

            // Event.
            pipelinesContainer.AddEventPipeline()
            .AddMiddleware(new Saritasa.Tools.Messages.Events.PipelineMiddlewares.EventHandlerLocatorMiddleware(
                               System.Reflection.Assembly.GetAssembly(typeof(Domain.UserContext.Entities.User))))
            .AddMiddleware(new Saritasa.Tools.Messages.Events.PipelineMiddlewares.EventHandlerExecutorMiddleware())
            .AddMiddleware(repositoryMiddleware)
            .AddMiddleware(recordRepositoryMiddleware);

            return(pipelinesContainer);
        }