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

メディエーター・パターンは、オブジェクト間の直接的な依存関係を削減して、疎結合を促進する形で相互作用を容易にするソフトウェア設計パターンです。 MediatRは、オブジェクト間のコミュニケーション促進においてシンプルさと効率性に重点を置いた野心的でない仲介者実装を提供します。
MediatRライブラリの中心にはリクエストと複数のハンドラの概念があります。 リクエストポイントで、オブジェクトはMediatRメカニズムによる処理を待つ操作や行動の詳細をカプセル化します。 各リクエストは対応するハンドラまたはハンドルメソッドで処理され、リクエストを実行するビジネスロジックが含まれます。この構造は、読み取りと書き込み操作の分離がよりメンテナブルでスケーラブルなソフトウェアアーキテクチャにつながるコマンドクエリ責任分離(CQRS)パターンを実装するのに特に有用です。
パッケージマネージャコンソールで for .NET CoreプロジェクトへのMediatRのインストール
ASP.NET CoreプロジェクトでMediatRを使用し始めるには、まずMediatRパッケージをインストールする必要があります。 これは、次のコマンドを使用してVisual Studioのパッケージマネージャコンソールで行うことができます。

パッケージをインストールした後、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
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()' 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 ClassPublic 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<int>インターフェースを実装し、このリクエストが作成されたユーザーの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 ClassPublic 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<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このコントローラーでは、_mediator.Send(command)を呼び出します。 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 ClassImports 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>
<!-- 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 ClassImports 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このコードスニペットでは、htmlContentはHTML形式でメディア情報を含むべき変数です。 これには、テキスト、画像、動画へのリンク、その他HTML互換のコンテンツが含まれる可能性があります。 IronPDFはこのHTMLコンテンツをPDFドキュメントに変換し、HTMLで指定されたレイアウトおよびフォーマットを保持します。

結論
この記事で説明したステップに従うことで、MediatRをプロジェクトに組み込み、基本的なコマンドおよびクエリハンドリングから通知および振る舞いなどの高度な機能を活用するための確固たる基盤を得ることができるはずです。 アプリケーションが成長および進化するにつれて、MediatRはコードベースをクリーンで、保守性が高く、拡張性のある状態に保つのに役立つツールとパターンを提供します。
締めくくりとして、異なるライブラリやツール、例えばIronPDFを調査し、それを統合することで、.NETプロジェクトをさらに充実させることができることを述べる価値があります。 IronPDFは高度なPDF機能の無料試用版を提供します。 高度なPDF機能を必要とするプロジェクト向けに、IronPDFのライセンスは$999から始まり、.NET開発者がアプリケーションの機能を拡張するための強力なソリューションを提供します。
ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。