Mediatr C# (Geliştiriciler için Nasıl Çalışır)
MediatR, nesnelerin birbirleriyle doğrudan iletişim kurmak yerine bir arabulucu aracılığıyla iletişim kurmasını sağlayan bir aracıdır ve popüler bir .NET kütüphanesidir. Bu yaklaşım, bileşenler arasındaki birbirine bağlılığın düşük tutulmasının istenildiği uygulamalarda özellikle faydalıdır. Bu makalede, C# geliştirme bağlamında MediatR'yi detaylı bir şekilde inceleyecek, uygulama projelerinize entegre etmenin pratik örneklerini ve rehberliğini sağlayacağız. Ayrıca ASP.NET Core projelerinde PDF işlevselliklerini entegre etmek için IronPDF kütüphanesini inceleyeceğiz.
Arabulucu Deseni ve MediatR'ye Giriş

Arabulucu deseni, yazılım tasarım deseni olup nesneler arasındaki etkileşimi kolaylaştırarak, onları birbirine bağlayıcı olarak gevşek bir şekilde bağlamaya teşvik eder. MediatR, nesne iletişimini kolaylaştırmada basitlik ve verimliliğe odaklanarak iddiasız bir arabulucu uygulaması sunar.
MediatR kütüphanesinin kalbinde istekler ve birden fazla işleyicinin konsepti yer alır. İstek noktasında, bir nesne işlemi veya eylem ayrıntılarını kapsar ve MediatR mekanizması tarafından işlenmeyi bekler. Her istek, isteği yürütmek için gerekli iş mantığını içeren, karşılık gelen bir işleyici veya işleme yöntemi tarafından ele alınır. Bu yapı, okuma ve yazma işlemlerinin ayrılmasının daha sürdürülebilir ve ölçeklenebilir yazılım mimarilerine yol açaileceği Komut Sorgu Sorumluluk Ayrımı (CQRS) deseni uygularken özellikle faydalıdır.
.NET Core Projesine Paket Yöneticisi Konsolu Kullanarak MediatR Kurulumu
MediatR'yi bir ASP.NET Core projesinde kullanmaya başlamak için önce MediatR paketini kurmanız gerekiyor. Bu işlem, Visual Studio'daki Paket Yöneticisi Konsolu aracılığıyla şu komutla gerçekleştirilebilir:
Install-Package MediatR

Paketi kurduktan sonra, MediatR'yi ASP.NET Core bağımlılık enjeksiyon kutusuna eklemek gereklidir. Bu genellikle, kullandığınız ASP.NET Core sürümüne bağlı olarak web uygulama projenizin Program.cs veya Startup.cs dosyasında yapılır. Minimum API sunum katmanına sahip bir program altında bunu nasıl yapabileceğinizi göstereceğiz.
// 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()
Program sınıfında, var builder = WebApplication.CreateBuilder(args); web uygulamasını başlatır ve MediatR entegrasyonu için ortam hazırlar.
İlk MediatR İsteğinizi ve İşleyicinizi Oluşturma
MediatR istekleri, belirli bir işlemi gerçekleştirmek için gereken verileri temsil eden basit sınıflardır. Yeni bir kullanıcı oluşturma komutunu temsil eden bir istek sınıfı örneği.
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
Bu örnekte, CreateUserCommand sınıfı IRequest
Sonraki adımda, bu istek için bir işlemci oluşturmanız gerekir. Her işlemcide, Handle yöntemi, isteğin mantığının yürütüldüğü yerdir:
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
Uygulamanızda MediatR Kullanımı
MediatR'yi kurarken kullandığınız süreci takip ederek, onu uygulamanızın iş akışına entegre edebilirsiniz. Bu genellikle, bir ASP.NET Core uygulamasındaki bir kontrolör veya uç nokta aracılığıyla gerçekleştirilir. Bir API kontrolcüsü kullanarak örnek:
[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
Bu denetleyicide, Create eylem yöntemi, CreateUserCommand'ı çağırarak MediatR'a gönderir. MediatR daha sonra bu komut için uygun işleyiciyi bulur ve çalıştırır. Sonuç döndürülür ve aynı işlemde bir cevap üretmek için kullanılır.
Temel İsteklerin Ötesinde: Bildirimler ve Davranışlar
MediatR ayrıca bildirimleri ve davranışları destekler. Bildirimler, çok sayıda işleyicinin abone olabileceği ve işleyebileceği mesajlar olup, uygulamanızda daha olay odaklı bir yaklaşıma olanak tanır. Öte yandan davranışlar, MediatR istekleriniz için orta katman gibidir, kayıt, doğrulama veya işlem yönetimi gibi çapraz kesen kaygıları uygulamanıza olanak tanır.
IronPDF Kütüphanesinin Tanıtımı

IronPDF, uygulamalarında PDF dosyalarını oluşturmak, düzenlemek ve bunlarla çalışmak isteyen .NET geliştiricileri için yazılan bir C# kütüphanesidir. Geliştiriciler, web sayfalarını veya HTML kodunu doğrudan PDF formatına dönüştürerek karmaşık API'lerle uğraşmadan PDF'ler oluşturabilir. IronPDF yalnızca PDF oluşturmaya sınırlı değildir; Ayrıca PDF'leri düzenlemek, örneğin metin, resim ve sayfalar eklemek ya da PDF belgelerinde form doldurmak ve düzenlemek gibi özellikler de sunar. Geliştiriciler PDF dosyalarıyla kapsamlı bir şekilde çalışabilir, birleşme, ayırma ve PDF dosyalarını şifreler ve izinlerle güvence altına alma gibi görevler yapabilir.
IronPDF, HTML'yi PDF'ye dönüştürme konusunda orijinal düzenleri ve stilleri koruyarak uzmanlaşmıştır. Web tabanlı içeriklerden raporlar, faturalar ve belgeler oluşturma için idealdir. HTML dosyalarından, URL'lerden ve hatta ham HTML dizgelerinden PDF dosyalarına dönüştürmeyi destekler.
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
Kod Örneği
Bu örnekte, MediatR isteğinin bir tür medya içerik veya meta veri ile ilgili olduğunu varsayalım, ve bunu PDF'imize eklemek istiyoruz. MediatR, IronPDF'in işlevselliğiyle doğrudan ilişkili olmadığından, bu durumu medya bilgisi veya referanslar sunan HTML içeriğinden bir PDF dokümanı oluşturarak ele alacağız.
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
Bu kod kesitinde, htmlContent, medya bilginizi HTML formatında içermesi gereken bir değişkendir. Bu, metin, resimler, videolara bağlantılar veya başka herhangi bir HTML ile uyumlu içeriği içerebilir. IronPDF bu HTML içeriğini, HTML'de belirtilen düzeni ve formatlamayı koruyarak bir PDF belgesine dönüştürecektir.

Sonuç

Bu makalede anlatılan adımları takip ederek, MediatR'yi projelerinize entegre etmek için sağlam bir temel oluşturmuş olmalısınız; temel komut ve sorgu işlemesinden, bildirimler ve davranışlar gibi daha ileri düzey özellikleri kullanmaya kadar. Uygulamanız büyüdükçe ve geliştiğinde, MediatR, kod tabanınızı temiz, sürdürülebilir ve ölçeklenebilir tutmanıza yardımcı olacak araçlar ve desenler sunar.
Sonuç olarak, IronPDF gibi farklı kütüphaneleri ve araçları keşfetmenin ve entegre etmenin .NET projelerinizi daha da geliştirebileceğini belirtmek gerekir. IronPDF, gelişmiş PDF özelliklerinin ücretsiz denemesini sunar. Gelişmiş PDF özellikleri gerektiren projelerde, IronPDF'in lisansı $799 ile başlamaktadır ve uygulamalarının işlevselliğini genişletmek isteyen .NET geliştiricileri için sağlam bir çözüm sunar.
Sıkça Sorulan Sorular
MediatR, ASP.NET Core projelerine nasıl entegre edilebilir?
MediatR'yi bir ASP.NET Core projesine entegre etmek için, onu Program.cs veya Startup.cs dosyanızdaki bağımlılık enjeksiyon konteynerine ekleyin. Paket Yöneticisi Konsolu'nu kullanarak Install-Package MediatR komutuyla yükleyebilirsiniz.
MediatR'deki istekler ve işlemciler hangi rolü oynar?
MediatR'de, istekler bir işlemin detaylarını kapsar ve işlemciler, bu istekleri gerekli iş mantığını yürüterek işleme alır. Bu, Komut Sorgu Sorumluluk Ayrımı (CQRS) desenini destekler ve uygulamaların sürdürülebilirliğini artırır.
MediatR'de bildirimler ve davranışlar nasıl katkı sağlar?
MediatR'deki bildirimler, bir tek mesaja tepki veren birden fazla işlemciye olanak tanır, etkinlik odaklı bir yaklaşım geliştirir. Davranışlar, logging, doğrulama ve hata ele alma gibi çapraz kesim endişeleriyle uğraşmak için bir ara katman gibi çalışır.
.NET uygulamalarında aracı desenini kullanmanın faydaları nelerdir?
MediatR tarafından uygulanan aracı deseni, bileşenler arasındaki doğrudan bağımlılıkları azaltır, gevşek bağlanmayı teşvik eder. Bu, .NET uygulamalarının temiz mimari ilkelerine uyarak sürdürülebilirliğini ve ölçeklenebilirliğini artırır.
.NET uygulamalarında HTML nasıl PDF'ye dönüştürülebilir?
IronPDF, .NET uygulamalarında HTML'yi PDF'ye dönüştürmeyi sağlar. RenderHtmlAsPdf metodunu kullanarak HTML dizilerini veya RenderUrlAsPdf kullanarak URL'leri dönüştürebilirsiniz, böylece sonuçtaki PDF'de düzen korunur.
IronPDF'nin PDF yönetimi için sunduğu ileri düzey özellikler nelerdir?
IronPDF, PDF'leri birleştirme, bölme, düzenleme gibi ileri düzey PDF yönetimi özellikleri sunar ve bunları parolalar ve izinlerle güvenceye alır. Bu yetenekler, raporlar, faturalar ve diğer belgeler oluşturma görevleri için idealdir.
MediatR CQRS desenini nasıl destekler?
MediatR, komut talepleri işleme mantığını sorgulardan ayırarak CQRS desenini destekler. Bu ayrım daha ölçeklenebilir ve sürdürülebilir kod sağlar, çünkü her işlem türü bağımsız olarak optimize edilebilir ve yönetilebilir.
.NET projelerinde IronPDF kullanmanın avantajları nelerdir?
IronPDF, .NET projelerinde PDF dosyaları oluşturma, düzenleme ve yönetme için kolay kullanımlı bir API sunar. HTML'yi düzeni koruyarak PDF'ye dönüştürebilme yeteneği, raporlar ve belgeler oluşturmak için güçlü bir araç haline getirir.




