フッターコンテンツにスキップ
.NETヘルプ

Mediatr C#(開発者向けの動作方法)

MediatRは人気のある.NETライブラリで、メディエーターを介してオブジェクト同士が直接ではなくコミュニケートできる仲介者パターンを実装します。 このアプローチは、コンポーネント間で低い結び付きレベルを保つことが望ましいアプリケーションに特に有用です。 この記事では、C#開発の文脈でMediatRを詳細に見て、実用的な例とウェブアプリケーションプロジェクトへの統合方法に関するガイダンスを提供します。 また、ASP.NET Core プロジェクトでPDF機能を統合するためのIronPDFライブラリ for PDF functionalities in .NET applicationsも探ります。

メディエーター・パターンとMediatRへのイントロダクション

Mediatr C#(開発者向けの働き方):図1 - MediatRとメディエーター・パターン

メディエーター・パターンは、オブジェクト間の直接的な依存関係を削減して、疎結合を促進する形で相互作用を容易にするソフトウェア設計パターンです。 MediatRは、オブジェクト間のコミュニケーション促進においてシンプルさと効率性に重点を置いた野心的でない仲介者実装を提供します。

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

パッケージマネージャコンソールでの.NET CoreプロジェクトへのMediatRのインストール

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

Install-Package MediatR

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

パッケージをインストールした後、MediatRをASP.NET Core依存注入コンテナに追加することが必要です。 これは通常、使用しているASP.NET Coreのバージョンに応じて、ウェブアプリケーションプロジェクトのProgram.csまたはStartup.csファイルで行います。 最小限のAPIプレゼンテーションレイヤーを持つプログラムでこれを行う方法を示します。

// Initialize a new web application
var builder = WebApplication.CreateBuilder(args);

// Add MediatR to the service container
builder.Services.AddMediatR(typeof(Program).Assembly);

// Build the web application
var app = builder.Build();
// Initialize a new web application
var builder = WebApplication.CreateBuilder(args);

// Add MediatR to the service container
builder.Services.AddMediatR(typeof(Program).Assembly);

// Build the web application
var app = builder.Build();
' Initialize a new web application
Dim builder = WebApplication.CreateBuilder(args)

' Add MediatR to the service container
builder.Services.AddMediatR(GetType(Program).Assembly)

' Build the web application
Dim app = builder.Build()
$vbLabelText   $csharpLabel

プログラムクラスで、var builder = WebApplication.CreateBuilder(args);は、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
$vbLabelText   $csharpLabel

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

次に、このリクエストに対するハンドラを作成する必要があります。各ハンドラ内で、Handleメソッドはリクエストのロジックが実行される場所です。

public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        // Implement logic to create a 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 a 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 a 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
$vbLabelText   $csharpLabel

アプリケーションでの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
$vbLabelText   $csharpLabel

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

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

MediatRは通知と振る舞いもサポートしています。 通知は、複数のハンドラがサブスクライブして処理できるメッセージであり、アプリケーション内でよりイベント駆動型のアプローチを可能にします。 一方、振る舞いはMediatRリクエストのためのミドルウェアのようなものであり、ロギング、バリデーション、またはトランザクション管理のようなクロスカッティングな懸念事項を実装できます。

IronPDFライブラリの紹介

Mediatr C# (How It Works For Developers):図3 - IronPDF

IronPDFは、アプリケーション内でPDFファイルを作成、編集、および処理するための簡単な方法を必要とする.NET開発者向けに設計されたC#ライブラリです。 開発者は、ウェブページやHTMLコードを直接PDF形式に変換することで、複雑なAPIを使わずにPDFを生成できます。 IronPDFはPDFを作成するだけにとどまらず、 PDF内のフォームの追加や編集、テキスト、画像の追加、ページの追加、さらにはPDF文書内でのフォームの記入および編集などの編集機能を提供します。 開発者はPDFファイルのマージ、分割、パスワードおよびアクセス許可を使用したセキュリティの設定など、包括的にPDFを操作できます。

IronPDFは、元のレイアウトとスタイルを正確に保持したHTML to PDF変換を専門としています。 これにより、レポート、請求書、文書化などのウェブベースのコンテンツからPDFを生成するのに最適です。 HTMLファイル、URL、さらには生のHTML文字列からPDFファイルへの変換をサポートしています。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

コード例

この例では、MediatRリクエストはPDFに含めたいメディアコンテンツまたはメタデータの何らかの形式を指すと仮定します。 MediatRはIronPDFの機能とは直接関連がないため、メディア情報や参照を含むHTMLコンテンツからPDFドキュメントを作成することを始めとしてアプローチします。

using IronPdf;

public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        // Insert your License Key here if required
        License.LicenseKey = "License-Key";

        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Create an HTML template with media information
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";

        // Convert the HTML string to a PDF document
        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)
    {
        // Insert your License Key here if required
        License.LicenseKey = "License-Key";

        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Create an HTML template with media information
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";

        // Convert the HTML string to a PDF document
        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)
		' Insert your License Key here if required
		License.LicenseKey = "License-Key"

		' Initialize the HtmlToPdf renderer
		Dim renderer = New ChromePdfRenderer()

		' Create an HTML template with media information
		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 the HTML string to a PDF document
		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
$vbLabelText   $csharpLabel

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

Mediatr C#(開発者向けの働き方):図4 - PDF出力

結論

Mediatr C#(開発者向けの働き方):図5 - ライセンス

この記事で説明したステップに従うことで、MediatRをプロジェクトに組み込み、基本的なコマンドおよびクエリハンドリングから通知および振る舞いなどの高度な機能を活用するための確固たる基盤を得ることができるはずです。 アプリケーションが成長および進化するにつれて、MediatRはコードベースをクリーンで、保守性が高く、拡張性のある状態に保つのに役立つツールとパターンを提供します。

締めくくりとして、異なるライブラリやツール、例えばIronPDFを調査し、それを統合することで、.NETプロジェクトをさらに充実させることができることを述べる価値があります。 IronPDFは高度なPDF機能の無料試用版を提供します。 高度なPDF機能を必要とするプロジェクトに対しては、IronPDFのライセンスは$799から始まり、アプリケーションの機能を拡張したい.NET開発者にとって堅牢なソリューションを提供します。

よくある質問

MediatRをASP.NET Coreプロジェクトに統合する方法は?

MediatRをASP.NET Coreプロジェクトに統合するには、Program.csまたはStartup.csファイルで依存性注入コンテナに追加します。 パッケージマネージャ コンソールでInstall-Package MediatRコマンドを使用してインストールできます。

MediatRにおいてリクエストとハンドラーはどのような役割を果たすか?

MediatRでは、リクエストは操作の詳細をカプセル化し、ハンドラーはこれらのリクエストを処理して必要なビジネス ロジックを実行します。 これにより、アプリケーションの保守性を向上させるコマンド クエリ責任分離(CQRS)パターンがサポートされます。

通知と振る舞いはどのようにしてMediatRを強化するか?

MediatRの通知により、複数のハンドラーが単一のメッセージに反応でき、イベント ドリブン型のアプローチが促進されます。 振る舞いはミドルウェアとして機能し、ログ記録、バリデーション、例外処理などの横断的関心を処理します。

.NETアプリケーションでメディエーターパターンを使用する利点は何ですか?

MediatRによって実装されるメディエーター パターンは、コンポーネント間の直接的な依存性を減らし、緩い結合を促進します。 これにより、クリーン アーキテクチャの原則に従い、.NETアプリケーションの保守性とスケーラビリティが強化されます。

.NETアプリケーションでHTMLをPDFに変換する方法は?

IronPDFは、.NETアプリケーションでHTMLをPDFに変換できます。 RenderHtmlAsPdfメソッドを使用してHTML文字列を変換したり、RenderUrlAsPdfを使用してURLを変換し、生成されるPDFでレイアウトを保持できます。

PDF管理のためのIronPDFの高度な機能は何ですか?

IronPDFは、PDFのマージ、分割、編集、およびパスワードと権限によるセキュリティ確保などの高度なPDF管理機能を提供します。 これらの機能は、レポートや請求書、その他の文書の生成などのタスクに理想的です。

MediatRはどのようにCQRSパターンをサポートしますか?

MediatRは、コマンドリクエスト処理のロジックをクエリから分離することでCQRSパターンをサポートします。 この分離により、各操作タイプを独立して最適化および管理でき、よりスケーラブルで保守性の高いコードが実現します。

.NETプロジェクトでIronPDFを使用する利点は何ですか?

IronPDFは、.NETプロジェクトでPDFファイルを作成、編集、管理するための使いやすいAPIを提供します。 HTMLをPDFに変換してレイアウトを保持する機能は、レポートやドキュメントの生成において強力なツールとなります。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。