iT邦幫忙

2022 iThome 鐵人賽

DAY 20
1
自我挑戰組

[Dot Net Core](圖解系列與常用套件)系列 第 20

[Dot Net Core](圖解系列) 20. MediatR - INotification

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20220920/20144614BZkDZ6GbFN.jpg

上一節有探討 MediatR套件的 IRequest 運作,
一樣於 .Net Core 中實行 MediatR套件的 INotification ,會先註冊此套件:

https://ithelp.ithome.com.tw/upload/images/20220920/201446149sRsNnB9V2.jpg

而 Service.AddMediatR 註冊的過程也於上一節的前半部分介紹過,這邊不在重複。接著觀察 Notification 的運作。

[INotification]

https://ithelp.ithome.com.tw/upload/images/20220920/20144614c56z3qvZ06.jpg

假設我們以執行以下程式碼為例:

await _mediator.Publish(new MessageNotice(customer), new System.Threading.CancellationToken());

而類別繼承了介面 INotification:

public class MessageNotice : INotification
{
	public DateTime SubmittedAt { get; set; }
	public string FullName { get; set; }
	public string EmailAddress { get; set; }
	public string Message { get; set; }


	public MessageNotice(Customer Customer)
	{

		FullName = Customer.FirstName + " " + Customer.LastName;
		SubmittedAt = DateTime.Now;
		EmailAddress = Customer.FirstName + "_" + Customer.LastName + "@mail.com";
		Message = " Happy Holiday! ";

	}

	public  MessageNotice()
	{

	}

}

執行的Handler類別:

public class MailNoticeHandler : INotificationHandler<MessageNotice>
{
	public Task Handle(MessageNotice notification, CancellationToken cancellationToken)
	{
		MailCollection.Instance[MailCollection.Instance.Count] = notification;
		return Task.CompletedTask;
	}
}

public class QueueNoticeHandler : INotificationHandler<MessageNotice>
{
	public Task Handle(MessageNotice notification, CancellationToken cancellationToken)
	{
		QueueCollection.Instance[QueueCollection.Instance.Count] = notification;
		return Task.CompletedTask;
	}
}

運作過程如下:

https://ithelp.ithome.com.tw/upload/images/20220920/20144614zEVec4bES3.jpg

其 MailCollection、QueueCollection 為自己簡化設計的儲存空間,未來可以替換成對Mail資訊 與 對Queue資訊相關的資料庫操作。

透過.net Core 的 DI 機制,可以在controller建構子取到 Mediator,與其中的欄位 ServiceFactory。
之後會用一些處理Type與Instance對應實體的處理。

接著圖中有幾個步驟:

第一,直接新增實例 NotificationHandlerWrapperImpl ,這邊的範例 TNotification 是 INotificationHandler。

第二,將 ServiceFactory 委派為由Dot Net Core 框架中的 IServiceProvider.GetService 經由註冊好的服務產生實例。
然後將 ServiceFactory 與 Mediator.PublishCore 函式傳遞至 NotificationHandlerWrapperImpl.Handle。

第三,利用 ServiceFactory 從已註冊的服務 INotificationHandler 實現實體,這也是由開發者所建立的類別。

第四,執行所有第三中實現的實體中的Handle函示。

以上為INotification運作過程闡述。


上一篇
[Dot Net Core](圖解系列) 19. MediatR - IRequest
下一篇
[Dot Net Core](圖解系列) 21. MediatR - PreProcess and PostProcess
系列文
[Dot Net Core](圖解系列與常用套件)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言