Ejemplo n.º 1
0
        /// <summary>
        /// 注入流程引擎服务
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddProcessEngineService(this IProcessEngineBuilder builder)
        {
            builder.AddBookmarkRuleProvider();

            builder.Services.AddTransient <IActivitiEngineAgendaFactory>(sp => new DefaultActivitiEngineAgendaFactory());

            builder.Services.AddSingleton <IBpmnParseFactory, DefaultBpmnParseFactory>();

            builder.AddProcessValidator();

            builder.Services.AddTransient <IRepositoryService>(sp => sp.GetRequiredService <IProcessEngine>().RepositoryService);

            builder.Services.AddTransient <IRuntimeService>(sp => sp.GetRequiredService <IProcessEngine>().RuntimeService);

            builder.Services.AddTransient <IManagementService>(sp => sp.GetRequiredService <IProcessEngine>().ManagementService);

            builder.Services.AddTransient <IHistoryService>(sp => sp.GetRequiredService <IProcessEngine>().HistoryService);

            builder.Services.AddTransient <ITaskService>(sp => sp.GetRequiredService <IProcessEngine>().TaskService);

            builder.Services.AddTransient <IDynamicBpmnService>(sp => sp.GetRequiredService <IProcessEngine>().DynamicBpmnService);

            builder.Services.AddTransient <IProcessEngine>(sp =>
            {
                return(sp.GetService <ProcessEngineFactory>().DefaultProcessEngine);
            });

            builder.Services.AddBpmModelServiceProvider();

            return(builder);
        }
Ejemplo n.º 2
0
        private static IProcessEngineBuilder AddSmartSqlMapper(this IProcessEngineBuilder builder)
        {
            builder.Services.AddSingleton <ISmartSqlMapper>(sp =>
            {
                var codebase = AppDomain.CurrentDomain.BaseDirectory;

                IDataSource dataSource = sp.GetService <IDataSource>();

                var dbSessionStore = new DbConnectionSessionStore(sp.GetService <ILoggerFactory>(), dataSource.DbProviderFactory);

                SmartSqlOptions options = new SmartSqlOptions
                {
                    ConfigPath     = Path.Combine(codebase, DEFAULT_MYBATIS_MAPPING_FILE),
                    DbSessionStore = dbSessionStore
                };

                SmartSqlMapper ssm = new SmartSqlMapper(options);

                options.SmartSqlContext.Settings.IsWatchConfigFile = true;
                options.SmartSqlContext.Database.WriteDataSource.ConnectionString = dataSource.ConnectionString;
                foreach (var ds in options.SmartSqlContext.Database.ReadDataSources)
                {
                    ds.ConnectionString = dataSource.ConnectionString;
                }

                return(ssm);
            });

            return(builder);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 注入数据源
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddDataSource(this IProcessEngineBuilder builder)
        {
            builder.AddSmartSqlDataSource()
            .AddSmartSqlMapper();

            return(builder);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 注入异步Timer执行器
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddAsyncExecutor(this IProcessEngineBuilder builder)
        {
            builder.Services.AddTransient <IAsyncExecutor>(sp =>
            {
                IConfigurationSection dajw = sp.GetService <IConfiguration>().GetSection("defaultAsyncJobAcquireWaitTimeInMillis");
                IConfigurationSection dtjw = sp.GetService <IConfiguration>().GetSection("defaultTimerJobAcquireWaitTimeInMillis");

                if (int.TryParse(dajw?.Value, out int iDajw) == false)
                {
                    iDajw = 10000;
                }
                if (int.TryParse(dtjw?.Value, out int iDtjw) == false)
                {
                    iDtjw = 10000;
                }

                return(new DefaultAsyncJobExecutor()
                {
                    DefaultAsyncJobAcquireWaitTimeInMillis = iDajw,
                    DefaultTimerJobAcquireWaitTimeInMillis = iDtjw,
                });
            });

            return(builder);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 注入会签人员提供类
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddBookmarkRuleProvider(this IProcessEngineBuilder builder)
        {
            IGetBookmarkRuleProvider getBookmarkRuleProvider = new GetBookmarkRuleProvider();

            builder.Services.AddSingleton(getBookmarkRuleProvider);

            return(builder);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 注入流程模型验证
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        private static IProcessEngineBuilder AddProcessValidator(this IProcessEngineBuilder builder)
        {
            IProcessValidator processValidator = new ProcessValidatorFactory().CreateProcessValidator();

            builder.Services.AddSingleton(processValidator);

            return(builder);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 注入流程引擎工厂
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddProcessEngineFactory(this IProcessEngineBuilder builder)
        {
            builder.Services.AddSingleton <ProcessEngineFactory>(sp =>
            {
                return(ProcessEngineFactory.Instance);
            });

            return(builder);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="configuration"></param>
        /// <param name="setupAction"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder Configure(this IProcessEngineBuilder builder, IConfiguration configuration, Action<DataSourceOption> setupAction)
        {
            builder.Services.Configure<ProcessEngineOption>(configuration);

            builder.Services.Configure<DataSourceOption>(setupAction);

            builder.Services.AddSingleton<ExternalConnectorProvider>(sp =>
            {
                return new ExternalConnectorProvider
                {
                    Configuration = configuration
                };
            });

            return builder;
        }
Ejemplo n.º 9
0
        /// <summary>
        ///  注入流程引擎配置
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddProcessEngineConfiguration(this IProcessEngineBuilder builder)
        {
            builder.Services.AddSingleton <ProcessEngineConfiguration>(sp =>
            {
                return(new StandaloneProcessEngineConfiguration(
                           new HistoryServiceImpl(),
                           new TaskServiceImpl(),
                           new DynamicBpmnServiceImpl(),
                           new RepositoryServiceImpl(),
                           new RuntimeServiceImpl(),
                           new ManagementServiceImpl(),
                           //sp.GetService<IAsyncExecutor>(),
                           null,
                           sp.GetService <IConfiguration>()
                           ));
            });

            return(builder);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 注入DatabaseReader
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddDataBaseReader(this IProcessEngineBuilder builder)
        {
            builder.Services.AddTransient <IDatabaseReader>(sp =>
            {
                var ds = sp.GetService <IDataSource>();

                DatabaseReader reader = new DatabaseReader(ds.Connection as DbConnection);

                switch (reader.DatabaseSchema.Provider)
                {
                case "MySql.Data.MySqlClient":
                    reader.Owner = ds.Connection.Database;
                    break;
                }

                return(reader);
            });

            return(builder);
        }
Ejemplo n.º 11
0
        public static IProcessEngineBuilder AddHibernateStores(this IProcessEngineBuilder builder,
                                                               Action <Configuration> configureAction = null)
        {
            var services = builder.Services;

            //builder.ConfigureServices(services =>
            //{
            AddHibernate(services, configureAction);
            //});

            services.AddScoped <IUnitOfWork, UnitOfWork>();

            //Add Stores.
            services.AddTransient <IDeploymentStore, DeploymentStore>();
            services.AddTransient <IEventSubscriptionStore, EventSubscriptionStore>();
            services.AddTransient <IScheduledJobStore, ScheduledJobStore>();
            services.AddTransient <ITaskStore, TaskStore>();
            services.AddTransient <IInstanceStore, InstanceStore>();
            services.AddTransient <IIdentityStore, IdentityStore>();

            return(builder);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 注入SmartSql数据源
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        private static IProcessEngineBuilder AddSmartSqlDataSource(this IProcessEngineBuilder builder)
        {
            Action <IDataSource> updateSmartSqlDbSession = (dataSource) =>
            {
                ISmartSqlMapper ssm = serviceProvider.GetService <ISmartSqlMapper>();

                ssm.SmartSqlOptions.DbSessionStore = new DbConnectionSessionStore(serviceProvider.GetService <ILoggerFactory>(), dataSource.DbProviderFactory);

                ssm.SmartSqlOptions.SmartSqlContext.Database.WriteDataSource.ConnectionString = dataSource.ConnectionString;
                foreach (var ds in ssm.SmartSqlOptions.SmartSqlContext.Database.ReadDataSources)
                {
                    ds.ConnectionString = dataSource.ConnectionString;
                }
            };

            builder.Services.AddSingleton <IDataSource>(sp =>
            {
                serviceProvider = sp;

                return(new Data.DataSource(sp.GetService <IOptionsMonitor <DataSourceOption> >(), updateSmartSqlDbSession));
            });

            return(builder);
        }
Ejemplo n.º 13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="configuration"></param>
        /// <param name="setupAction"></param>
        /// <returns></returns>
        public static IProcessEngineBuilder AddProcessEngine(this IProcessEngineBuilder builder, IConfiguration configuration, Action <DataSourceOption> setupAction)
        {
            ConfigUtil.Configuration = configuration;

            TypeRegistry.RegisterType(typeof(TimerUtil));
            builder.Services.AddSpringCoreTypeRepository();

            builder.Services.AddSpringCoreService(builder.Services.BuildServiceProvider().GetService <ILoggerFactory>());

            builder.Services.AddSingleton <MemoryCacheProvider>();

            builder.Services.AddHttpClient <HttpClient>()
            .ConfigureHttpMessageHandlerBuilder(cb =>
            {
                HttpClientHandler handler           = new HttpClientHandler();
                handler.MaxRequestContentBufferSize = int.MaxValue;
                handler.ClientCertificateOptions    = ClientCertificateOption.Automatic;
                handler.UseDefaultCredentials       = true;
                handler.ServerCertificateCustomValidationCallback += (s, arg1, arg2, arg3) => true;

                cb.PrimaryHandler = handler;
                cb.Build();
            });

            DbSqlSessionVersion.InitVersion(configuration);

            builder.Configure(configuration, setupAction);

            builder.Services.AddSingleton <IIdGenerator>(sp => new GuidGenerator());

            builder.Services.AddUserSession <DefaultUserSession>();

            builder.Services.AddWorkflowAccessTokenProvider <DefaultAccessTokenProvider>();

            builder.Services.AddTransient <IHttpClientProxy>(sp =>
            {
                try
                {
                    HttpClient client = sp.GetService <IHttpClientFactory>().CreateClient();
                    var url           = sp.GetService <ExternalConnectorProvider>().WorkflowUrl;
                    if (!string.IsNullOrWhiteSpace(url))
                    {
                        client.BaseAddress = new Uri(url);
                    }

                    return(new DefaultHttpClientProxy(client,
                                                      sp.GetService <IAccessTokenProvider>(),
                                                      sp.GetService <IHttpContextAccessor>()));
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            });

            builder.Services.AddSingleton <IUserServiceProxy, DefaultUserServiceProxy>();

            builder.Services.AddTransient <IServiceWebApiHttpProxy, ServiceWebApiHttpProxy>();

            builder.AddDataSource()
            .AddDataBaseReader()
            .AddAsyncExecutor()
            .AddProcessEngineConfiguration()
            .AddProcessEngineFactory()
            .AddProcessEngineService();

            return(builder);
        }