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

メディエーター・パターンは、オブジェクト間の直接的な依存関係を削減して、疎結合を促進する形で相互作用を容易にするソフトウェア設計パターンです。 MediatRは、オブジェクト間のコミュニケーション促進においてシンプルさと効率性に重点を置いた野心的でない仲介者実装を提供します。
MediatRライブラリの中心にはリクエストと複数のハンドラの概念があります。 リクエストポイントで、オブジェクトはMediatRメカニズムによる処理を待つ操作や行動の詳細をカプセル化します。 各リクエストは対応するハンドラまたはハンドルメソッドで処理され、リクエストを実行するビジネスロジックが含まれます。この構造は、読み取りと書き込み操作の分離がよりメンテナブルでスケーラブルなソフトウェアアーキテクチャにつながるコマンドクエリ責任分離(CQRS)パターンを実装するのに特に有用です。
パッケージマネージャーコンソールを使用した.NET CoreプロジェクトへのMediatRのインストール
ASP.NET CoreプロジェクトでMediatRを使用し始めるには、まずMediatRパッケージをインストールする必要があります。 これは、次のコマンドを使用してVisual Studioのパッケージマネージャコンソールで行うことができます。
Install-Package 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()
プログラム クラスでは、var builder = WebApplication.CreateBuilder(args); が Web アプリケーションを初期化し、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
この例では、CreateUserCommandクラスは、IRequest
次に、このリクエストのハンドラーを作成する必要があります。各ハンドラー内では、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
アプリケーションでの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
このコントローラでは、Create アクション メソッドが _mediator.Send(command) を呼び出してCreateUserCommandを MediatR に送信します。 MediatRはこのコマンドの適切なハンドラを見つけて、それを実行します。 結果は返され、同じプロセスでレスポンスの生成に使用されます。
基本的なリクエストを超えて:通知と振る舞い
MediatRは通知と振る舞いもサポートしています。 通知は、複数のハンドラがサブスクライブして処理できるメッセージであり、アプリケーション内でよりイベント駆動型のアプローチを可能にします。 一方、振る舞いはMediatRリクエストのためのミドルウェアのようなものであり、ロギング、バリデーション、またはトランザクション管理のようなクロスカッティングな懸念事項を実装できます。
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
コード例
この例では、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>
{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>
{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(htmlContent As String)
' Insert your License Key here if required
License.LicenseKey = "License-Key"
' Initialize the HtmlToPdf renderer
Dim renderer As 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>
{htmlContent}
</body>
</html>"
' Convert the HTML string to a PDF document
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
pdfDocument.SaveAs("MediaInformation.pdf")
End Sub
End Class
Module Program
Sub Main(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 Module
このコードスニペットでは、htmlContentはHTML形式でメディア情報を含むべき変数です。 これには、テキスト、画像、動画へのリンク、その他HTML互換のコンテンツが含まれる可能性があります。 IronPDFはこのHTMLコンテンツをPDFドキュメントに変換し、HTMLで指定されたレイアウトおよびフォーマットを保持します。

結論

この記事で説明したステップに従うことで、MediatRをプロジェクトに組み込み、基本的なコマンドおよびクエリハンドリングから通知および振る舞いなどの高度な機能を活用するための確固たる基盤を得ることができるはずです。 アプリケーションが成長および進化するにつれて、MediatRはコードベースをクリーンで、保守性が高く、拡張性のある状態に保つのに役立つツールとパターンを提供します。
締めくくりとして、異なるライブラリやツール、例えばIronPDFを調査し、それを統合することで、.NETプロジェクトをさらに充実させることができることを述べる価値があります。 IronPDFは高度なPDF機能の無料試用版を提供します。 高度な PDF 機能を必要とするプロジェクトの場合、IronPDF のライセンスは $999 から始まり、アプリケーションの機能を拡張したいと考えている.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に変換してレイアウトを保持する機能は、レポートやドキュメントの生成において強力なツールとなります。




