<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MediatR-進程內的消息通信框架

      MediatR是一款進程內的消息訂閱、發布框架,提供了Send方法用于發布到單個處理程序、Publish方法發布到多個處理程序,使用起來非常方便。目前支持 .NET Framework4.5、.NET Stardand1.3、.NET Stardand2.0等版本,可跨平臺使用。

      使用MediatR

      要在項目中使用MediatR,首先要添加引用:nuget install MediatR

      在使用MediatR的時候,需要設置一個容器來實例化所有的Handler,因此我們需要與依賴注入框架結合使用,MediatR支持目前主流的依賴注入框架,例如Autofac等,也可以直接使用 .NET Core 的依賴注入框架。

      如果使用 .net core的依賴注入,將MediatR添加到容器將會很方便:

      services.AddMediatR(typeof(Program).Assembly);
      

      如果是多個程序集,如果是多個程序集:

      services.AddMediatR(typeof(Program).Assembly, typeof(HelloWorld).Assembly);
      

      MediatR有兩種消息處理模式:

      • Request/Response模式:Message將被單個Handler處理,可以有返回值
      • Notifictaion模式:Message可以被多個Handler處理,無返回值

      Request/Response模式

      使用起來很簡單,首先定義Request消息,方法如下:

      public class Ping : IRequest<string> { }
      

      然后,定義它的處理程序:

      public class PingHandler : IRequestHandler<Ping, string> {
          public Task<string> Handle(Ping request, CancellationToken cancellationToken) {
              return Task.FromResult("Pong");
          }
      }
      

      這樣就可以了,我們在控制臺發送Ping消息:

      var response = await mediator.Send(new Ping());
      Console.WriteLine(response); // "Pong"
      

      無返回值的消息

      當處理消息不需要返回值時,我們應該使用如下方式定義消息:

      public class Ping : IRequest { }
      

      對應的消息處理程序如下:

      public class PingHandler: AsyncRequestHandler<Ping> {
          protected override Task Handle(Ping request, CancellationToken cancellationToken) {
              // todo...
          }
      }
      

      同步的消息處理

      默認情況下消息的處理都是異步的(返回值為Task對象),如果你想要同步執行消息,需要按下面的方式定義消息處理程序:

      public class PingHandler : RequestHandler<Ping, string> {
          protected override string Handle(Ping request) {
              return "Pong";
          }
      }
      

      這種模式符合CQRS中Command的處理方式,一個Command只能有一個Handler,因此,在使用CQRS時可以參考。

      Notification 模式

      Notification模式將消息發布給多個處理程序,消息的處理沒有返回值。

      消息的定義:

      public class HelloWorld : INotification
      {
      }
      

      多個處理程序:

      public class CNReply : INotificationHandler<HelloWorld>
      {
          public Task Handle(HelloWorld notification, CancellationToken cancellationToken)
          {
              Console.WriteLine($"CN Reply: Hello from CN");
              return Task.CompletedTask;
          }
      }
      
      public class USReply : INotificationHandler<HelloWorld>
      {
          public Task Handle(HelloWorld notification, CancellationToken cancellationToken)
          {
              Console.WriteLine($"US Reply: Hello from US");
              return Task.CompletedTask;
          }
      }
      

      然后通過Publish方法發布消息:

      await mediator.Publish(helloworld);
      

      發布策略

      默認情況下,MediatR的消息發布是一個一個執行的,即便是返回Task的情況,也是使用await等待上一個執行完成后才進行下一個的調用。如果需要使用并行的方法進行調用,可以進行定制,具體可參考官方示例:MediatR.Examples.PublishStrategies

      多態支持

      MediatR消息處理程序是支持逆變的,例如我們可以定義一個消息監聽程序,監聽所有發布的Notification:

      public class MessageListener : INotificationHandler<INotification>
      {
          public Task Handle(INotification notification, CancellationToken cancellationToken)
          {
              Console.WriteLine($"接收到新的消息:{notification.GetType()}");
      
              return Task.CompletedTask;
          }
      }
      

      對于IRequest類型的消息,此種方式未驗證成功。如果可以的話,倒是可以做一個無處理程序的消息的監聽,也是挺好玩的。

      異步

      對于MediatR來說,無論是發送IRequest類型消息,還是發布INotification類型消息,都是異步的。這里需要特別留意,即使你使用的是同步的消息處理程序,對于消息發布來說,都是異步的,與你的處理程序是同步或異步無關。

      參考文檔

      posted @ 2019-07-21 19:15  拓荒者IT  閱讀(3951)  評論(0)    收藏  舉報
      皮膚配置 參考地址:https://www.yuque.com/awescnb/user
      主站蜘蛛池模板: 日本道播放一区二区三区| 亚洲一区在线成人av| 国产在线观看免费观看| 欧美三级欧美成人高清| 国产又色又刺激高潮视频| 中文字幕无码免费久久| 色婷婷欧美在线播放内射| 午夜福利你懂的在线观看| 久9视频这里只有精品试看| 国产日产亚洲系列最新| 内射视频福利在线观看| 四虎国产精品成人免费久久| 在线观看热码亚洲av每日更新| 好吊视频一区二区三区人妖| 激情综合色综合啪啪五月| 综合偷自拍亚洲乱中文字幕| 丰满少妇被猛烈进出69影院| 性姿势真人免费视频放| 精品亚洲国产成人av| 精品精品亚洲高清a毛片| 亚洲av成人在线一区| 国产乱妇乱子视频在播放| 亚洲成人高清av在线| 武平县| 欧美粗大猛烈老熟妇| 亚洲欧美日韩在线码| 波多野结衣的av一区二区三区| 欧美激情一区二区| 国产精品免费重口又黄又粗| 日本久久久免费高清| 国产目拍亚洲精品二区| 日韩毛片在线视频x| 国产精品色内内在线播放| 亚洲第一极品精品无码久久| 久久一级精品久熟女人妻| 国产成人免费午夜在线观看| 激情综合网激情综合网五月| 国产精品一区在线蜜臀| 国产精品免费中文字幕| 亚洲v欧美v日韩v国产v| 亚洲男人天堂2021|