(Dnc系列)借助Dnc.Events.InMemory在三分钟实现一个内存级别的事件驱动处理模型

前言

Dnc.Events是在借鉴领域驱动设计大佬daxnet的博客基础上做的基于内存级别的EDA处理模型,不清楚EDA的童鞋请自行百度。

第一分钟 安装Nuget Dnc.Events.InMemory

新建一个控制台项目并安装依赖

image

Instal-Package dnc.events.inmemory

添加appsettings.json并设置事件存储的文件路径

{
   "ConnectionStrings": {
     "event_store": "f://event_store.txt"
   }
}

注意设置:appsettings.json为较新复制或者一直复制,不然会抛出异常

image

第二分钟 定义一个事件和事件的处理器

事件,依赖于基类DomainEvent

public class TimeUpdatedEvent
      : DomainEvent
  { }

事件处理器,继承自DomainEventHandler<>

public class VersionSetEventHandler
         : DomainEventHandler<VersionSetEvent>
     {
         public VersionSetEventHandler(IEventStore eventStore)
             : base(eventStore)
         { }

        protected override Task HandleAsync(VersionSetEvent @event)
         {
             var version = @event.Version;
             return Task.FromResult(version);
         }
     }

第三分钟 服务注册和订阅发布

服务注册,服务注册依赖于Dnc.Core的注册机制,事件注册服务,build构建ServiceProvider

image

Fx.SrvRegisteredEvent += services =>
            {
                services.AddScoped<IEventHandler, VersionSetEventHandler>();
            };
            Fx.CreateDefaultConstruction().Build();

使用事件总线订阅和发布事件

var eventbus = Fx.Resolve<IEventBus>();

             var eh = Fx.Resolve<IEventHandler>();

             var es = Fx.Resolve<IEventStore>();

             eventbus.Subscribe();

             eventbus.PublishAsync(new VersionSetEvent());

后记

事件驱动、cqrs是领域驱动里面比较重要的概念,今天带着大家做了个简单的例子,这对于理解事件驱动的相关概念是蛮有帮助的。源码地址https://www.nuget.org/packages/Dnc.Events.InMemory/Dnc.Events.InMemory

posted @ 2019-05-24 16:36  张建wechatmedia.top  阅读(208)  评论(0编辑  收藏  举报
returnTop