.NET ヘルプ

Mediatr C#(開発者向けの使い方)

公開済み 2024年4月29日
共有:

MediatRは、人気のある.NETライブラリであり、メディエーター・パターンを実装し、オブジェクトが直接ではなくメディエーターを介して互いに通信できるようにします。 このアプローチは、コンポーネント間の結合度を低く保つことが望ましいアプリケーションに特に有用です。 この記事では、C#開発の文脈でMediatRを詳細に見ていき、ウェブアプリケーションプロジェクトにそれを統合するための実践的な例とガイダンスを提供します。 また、次のことを探求します.NETアプリケーションのPDF機能のためのIronPDFライブラリASP.NET CoreプロジェクトにおけるPDF機能の統合のために。

メディエーターパターンとMediatRの紹介

Mediatr C#(開発者向けの仕組み): 図1 - MediatR と Mediator パターン

メディエーター・パターンは、オブジェクト間の相互作用を促進するソフトウェア設計パターンであり、オブジェクト間の直接的な依存関係を減少させ、疎結合を促進します。 MediatRは、シンプルで効率的なオブジェクト通信を促進することに重点を置いた、控えめなメディエーターの実装を提供します。

MediatRライブラリの中心には、リクエストと複数のハンドラーの概念があります。 リクエストポイントでは、オブジェクトが操作またはアクションの詳細をカプセル化し、MediatRメカニズムによって処理されるのを待ちます。 各リクエストは、リクエストを実行するビジネスロジックを含む対応するハンドラまたはハンドルメソッドによって処理されます。この構造は、コマンドとクエリの責任分離(Command Query Responsibility Segregation)を実装するために特に有用です。(CQRS)読み取り操作と書き込み操作を分離することで、より保守しやすくスケーラブルなソフトウェアアーキテクチャを実現できるパターン。

.NET CoreプロジェクトにMediatRをインストールするには、パッケージマネージャーコンソールを使用します

ASP.NET CoreプロジェクトでMediatRを使用し始めるには、最初にMediatRパッケージをインストールする必要があります。 これは、Visual Studio のパッケージ マネージャー コンソールで次のコマンドを使用して実行できます:

Install-Package MediatR

Mediatr C#(開発者向けの使い方):図2 - MediatRのインストール

パッケージをインストールした後、ASP.NET Coreの依存関係注入コンテナにMediatRを追加する必要があります。 これは通常、使用しているASP.NET Coreのバージョンに応じて、WebアプリケーションプロジェクトのProgram.csまたはStartup.csファイルで行われます。 以下のように、APIプレゼンテーションレイヤーを最小限に抑えたプログラムで実行することができます。

// writing code
var builder = WebApplication.CreateBuilder(args);
// Add MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
// writing code
var builder = WebApplication.CreateBuilder(args);
// Add MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
' writing code
Dim builder = WebApplication.CreateBuilder(args)
' Add MediatR
builder.Services.AddMediatR(GetType(Program).Assembly)
Dim app = builder.Build()
VB   C#

プログラムクラスで、**var builder = WebApplication.CreateBuilder(引数)ウェブアプリケーションを初期化し、MediatR統合の準備を行います。

初めてのMediatRリクエストとハンドラの作成

MediatRリクエストは、パブリッククラスのメールハンドラのような単純なクラスで、特定の操作を実行するために必要なデータを表します。 こちらは、新しいユーザーを作成するコマンドを表すリクエストパブリッククラスの例です。

public class CreateUserCommand : IRequest<int>
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int id {get; set;}
}
public class CreateUserCommand : IRequest<int>
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int id {get; set;}
}
Public Class CreateUserCommand
	Implements IRequest(Of Integer)

	Public Property Name() As String
	Public Property Email() As String
	Public Property id() As Integer
End Class
VB   C#

この例では、CreateUserCommand クラスが IRequest を実装します。インターフェース は、このリクエストが整数の応答を期待していることを示しており、これは作成されたユーザーのIDを表す可能性があります。

次に、このリクエストのためのハンドラーを作成する必要があります。各ハンドラー内で、public async Task Handle メソッドがリクエストのロジックが実行される中心的な部分です。

public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        // Implement logic to create user here
        // For this example, let's pretend we create a user and return the ID
        return await Task.FromResult(1); // Assume the user's ID is 1
    }
}
public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        // Implement logic to create user here
        // For this example, let's pretend we create a user and return the ID
        return await Task.FromResult(1); // Assume the user's ID is 1
    }
}
Public Class CreateUserHandler
	Implements IRequestHandler(Of CreateUserCommand, Integer)

	Public Async Function Handle(ByVal command As CreateUserCommand, ByVal token As CancellationToken) As Task(Of Integer)
		' Implement logic to create user here
		' For this example, let's pretend we create a user and return the ID
		Return Await Task.FromResult(1) ' Assume the user's ID is 1
	End Function
End Class
VB   C#

アプリケーションでMediatRを使用する

同じプロセスを使用してMediatRの設定を行うことで、アプリケーションのワークフローにそれを統合します。 これは通常、ASP.NET Coreアプリケーションのコントローラーまたはエンドポイントを通じて行われます。 以下は、APIコントローラーを使用した例です:

[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
    private readonly IMediator _mediator;
    public UsersController(IMediator mediator)
    {
        _mediator = mediator;
    }
    [HttpPost]
    public async Task<ActionResult<int>> Create(CreateUserCommand command)
    {
        var userId = await _mediator.Send(command);
        return CreatedAtRoute("GetUser", new { id = userId }, command);
    }
}
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
    private readonly IMediator _mediator;
    public UsersController(IMediator mediator)
    {
        _mediator = mediator;
    }
    [HttpPost]
    public async Task<ActionResult<int>> Create(CreateUserCommand command)
    {
        var userId = await _mediator.Send(command);
        return CreatedAtRoute("GetUser", new { id = userId }, command);
    }
}
<ApiController>
<Route("[controller]")>
Public Class UsersController
	Inherits ControllerBase

	Private ReadOnly _mediator As IMediator
	Public Sub New(ByVal mediator As IMediator)
		_mediator = mediator
	End Sub
	<HttpPost>
	Public Async Function Create(ByVal command As CreateUserCommand) As Task(Of ActionResult(Of Integer))
		Dim userId = Await _mediator.Send(command)
		Return CreatedAtRoute("GetUser", New With {Key .id = userId}, command)
	End Function
End Class
VB   C#

このコントローラーでは、Create アクションメソッドが _mediator.Send を呼び出して、CreateUserCommand を MediatR に送信します。(コマンド)**. MediatRはこのコマンドに対して適切なハンドラを見つけ、実行します。 結果が返され、同じプロセスでレスポンスを生成するために使用されます。

基本的なリクエストを超えて:通知と振る舞い

MediatRは通知とビヘイビアもサポートしています。 通知は、複数のハンドラーが購読および処理できるメッセージであり、アプリケーション内でよりイベント駆動型のアプローチを可能にします。 一方、ビヘイビアは、MediatRリクエストに対するミドルウェアに似ており、ログ記録、バリデーション、トランザクション管理などの横断的な関心事を実装することができます。

IronPDFライブラリの紹介

Mediatr C#(開発者向けの動作方法): 図3 - IronPDF

IronPDFは、アプリケーション内でPDFファイルを作成、編集、操作するための簡単な方法を必要とする.NET開発者向けに設計されたC#ライブラリです。 開発者は、複雑なAPIに関わることなく、ウェブページやHTMLコードを直接PDF形式に変換. IronPDFはPDFの作成だけに限りません。 また、PDF内でテキスト、画像、ページを追加したり、フォームに入力および編集するなどのPDF編集機能も提供しています。 開発者は、PDFの結合、分割、パスワードや権限によるセキュリティ対策などを含めたPDFの総合的な操作を行うことができます。

コード例

この例では、MediatRリクエストがPDFに含めたいメディアコンテンツまたはメタデータの形式を指していると仮定します。 MediatRはIronPDFの機能に直接関係しないため、メディア情報や参照を含むHTMLコンテンツからPDFドキュメントを作成する方法を出発点として取り上げます。

using IronPdf;
public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        License.LicenseKey = "License-Key";
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();
        // Example HTML content - replace this with your actual HTML content
        // Here, "htmlContent" should include your MediatR information in HTML format
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        // Convert HTML string to PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
        pdfDocument.SaveAs("MediaInformation.pdf");
    }
}
class Program
{
    static void Main(string [] args)
    {
        // Example HTML content with MediatR information
        string htmlContent = @"
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>";
        // Create an instance of PdfGenerator
        PdfGenerator pdfGenerator = new PdfGenerator();
        // Call the CreatePdfWithMediaInfo method to generate the PDF
        pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        License.LicenseKey = "License-Key";
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();
        // Example HTML content - replace this with your actual HTML content
        // Here, "htmlContent" should include your MediatR information in HTML format
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        // Convert HTML string to PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
        pdfDocument.SaveAs("MediaInformation.pdf");
    }
}
class Program
{
    static void Main(string [] args)
    {
        // Example HTML content with MediatR information
        string htmlContent = @"
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>";
        // Create an instance of PdfGenerator
        PdfGenerator pdfGenerator = new PdfGenerator();
        // Call the CreatePdfWithMediaInfo method to generate the PDF
        pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Public Class PdfGenerator
	Public Sub CreatePdfWithMediaInfo(ByVal htmlContent As String)
		License.LicenseKey = "License-Key"
		' Initialize the HtmlToPdf renderer
		Dim renderer = New ChromePdfRenderer()
		' Example HTML content - replace this with your actual HTML content
		' Here, "htmlContent" should include your MediatR information in HTML format
		Dim htmlTemplate As String = $"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>"
		' Convert HTML string to PDF
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
		pdfDocument.SaveAs("MediaInformation.pdf")
	End Sub
End Class
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Example HTML content with MediatR information
		Dim htmlContent As String = "
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>"
		' Create an instance of PdfGenerator
		Dim pdfGenerator As New PdfGenerator()
		' Call the CreatePdfWithMediaInfo method to generate the PDF
		pdfGenerator.CreatePdfWithMediaInfo(htmlContent)
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
VB   C#

次のコードスニペットでは、htmlContent は、HTML形式でメディア情報を含むべき変数です。 これはテキスト、画像、動画リンク、その他のHTML互換コンテンツを含む可能性があります。 IronPDFは、このHTMLコンテンツをPDFドキュメントに変換し、HTMLで指定されたレイアウトやフォーマットを保持します。

メディアトル C#(開発者のための仕組み):図4 - PDF出力

結論

Mediatr C#(開発者向けの仕組み):図5 - ライセンス

この記事で説明されている手順に従えば、基本的なコマンドおよびクエリ処理から、通知やビヘイビアなどのより高度な機能を活用するまで、MediatRをプロジェクトに組み込むための確固たる基盤を得ることができるはずです。 アプリケーションが成長し進化する中で、MediatRは、コードベースをクリーンで、メンテナブルで、スケーラブルに保つためのツールとパターンを提供します。

結論として、IronPDFなどのさまざまなライブラリやツールを探索して統合することで、.NETプロジェクトをさらに強化することができる点を指摘する価値があります。 IronPDFは高度なPDF機能の無料トライアル. 高度なPDF機能を必要とするプロジェクトのために、IronPDFのライセンスは749ドルから提供されており、アプリケーションの機能を拡張したい.NETの開発者にとって強力なソリューションを提供します。

< 以前
Resharper C#(開発者向けの動作方法)
次へ >
Avalonia C# (開発者向けの動作方法)