Dotnet Core Webapi项目学习使用Workflow

2019-04-18  本文已影响0人  夏天的夏秋天的天
Workflow-core是基于.net core 的一款轻量级工作流引擎。

Workflow Core is a light weight workflow engine targeting .NET Standard. Think: long running processes with multiple tasks that need to track state. It supports pluggable persistence and concurrency providers to allow for multi-node clusters. --来自官网文档

GITHUB:https://github.com/danielgerlag/workflow-core
官方文档:https://github.com/danielgerlag/workflow-core/wiki

目前刚接触与工作流相关的项目
以此工作流引擎来进行学习


在WebApi项目中导入相关Nuget包
Install-Package WorkflowCore 或 dotnet add package WorkflowCore
也可以通过vs进行导入


Workflow Package

此外要需要导入需要连接的DB的包


Mysql Workflow

在Startup.cs中进行注入:


ConfigureServices

在项目中建立了一个TestWorkflow.cs 继承 IWorkflow

public class HelloWorkFlow : IWorkflow
    {
        public string Id => nameof(helloworld);

        public int Version => 1;

        public void Build(IWorkflowBuilder<object> builder)
        {
            builder
                .StartWith<helloworld>(); //helloworld为手动创建的一个step
        }
    }

在helloworld.cs中

public class helloworld : StepBody
    {
        private IUnitOfWork _unitOfWork;     
        private IUserRepository _userRepository;
        public helloworld(IUnitOfWork unitOfWork, IUserRepository userRepository)
        {
            _unitOfWork = unitOfWork;
            _userRepository = userRepository;
        }
       //在这中实现需要执行的方法
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            //为数据库中添加一个新的用户
            TbUser user = new TbUser { UserId = Method.GetGuid32(), UserName = "WorkFlowAdd" };

            _userRepository.Add(user);
            _unitOfWork.Save();
            return ExecutionResult.Next();
        }
    }

然后需要会带Startup.cs对写好的流进行使用

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<helloworld>();
            services.AddWorkflow(x => x.UseMySQL(Configuration.GetConnectionString("mysqlconnectionString"), true, true));
        }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            var host = app.ApplicationServices.GetService<IWorkflowHost>();
            host.RegisterWorkflow<HelloWorkFlow>();
            host.Start();
        }

进入Controller中

private readonly IUserRepository _userRepository;
        private readonly IWorkflowHost _workflowHost;
        public UserController(IWorkflowHost workflowHost)
        {
            _workflowHost = workflowHost;
        }
//编写一个测试接口来调用
        [HttpGet("test")]
        public Message Test()
        {
            _workflowHost.StartWorkflow(nameof(HelloWorkFlow));
            return Message.Ok();
        }

测试结果:
通过Postman进行接口访问测试


结果

成功,看看数据库中是否生成了对应的User信息


table_tbuser

在运行程序时因为连接了MYSQL数据库,workflowcore会生成相应的表


db

Workflow表中也会生成记录


table_workflow

其他各表有什么作用还在学习中~~~~~~

上一篇下一篇

猜你喜欢

热点阅读