Mediatr C# (Geliştiriciler için Nasıl Çalışır)
MediatR, nesnelerin doğrudan iletişim kurmak yerine bir aracı aracılığıyla iletişim kurmasını sağlayarak, bir .NET kütüphanesi olan aracı desenini uygulamaktadır. Bu yaklaşım, bileşenler arasındaki bağımlılığı düşük seviyede tutmanın arzu edildiği uygulamalarda özellikle faydalıdır. Bu makalede, C# geliştirme bağlamında MediatR'yi detaylı şekilde inceleyeceğiz ve web uygulama projelerinize nasıl entegre edileceği konusunda pratik örnekler ve rehberlik sunacağız. Ayrıca, ASP.NET Core projelerinde PDF işlevselliklerinin entegrasyonu için IronPDF kütüphanesini de inceleyeceğiz.
Aracı Desen ve MediatR'ye Giriş

Aracı deseni, doğrudan bağımlılıkları azaltacak şekilde nesneler arasındaki etkileşimi kolaylaştıran bir yazılım tasarım desenidir, gevşek bağlılığı artırır. MediatR, nesne iletişimini kolaylaştırmada basitliği ve verimliliği vurgulayarak, iddiasız bir aracı uygulaması sunar.
MediatR kütüphanesinin merkezinde, talepler ve birden fazla işleyici konsepti vardır. Bir istek noktasında, bir nesne, işlenmeyi bekleyen operasyon veya eylem detaylarını kapsar ve MediatR mekanizması ile işlem görmeyi bekler. Her istek, iş ad logicini uygulayan ilgili bir işleyici veya işleyici metodu tarafından ele alınır. Bu yapı, okuma ve yazma işlemlerinin ayrılması daha sürdürülebilir ve ölçeklenebilir yazılım mimarilerine yol açabilecek olan, Komut Sorgu Sorumluluk Ayrımı (CQRS) deseninin uygulanması için özellikle faydalıdır.
Bir .NET Core Projesinde Package Manager Konsolu ile MediatR Kurulumu
Bir ASP.NET Core projesinde MediatR kullanmaya başlamak için önce MediatR paketini kurmanız gerekmektedir. Bu, Visual Studio'daki Package Manager Konsolu aracılığıyla şu komutla yapılabilir:
Install-Package MediatR

Paketi kurduktan sonra, MediatR'yi ASP.NET Core bağımlılık enjeksiyonu konteynerine eklemelisiniz. Bu genellikle, ASP.NET Core sürümünüze bağlı olarak web uygulamanızın Program.cs veya Startup.cs dosyasında yapılır. Bir minimal API sunum katmanına sahip bir programda bunu nasıl yapabileceğinizi işte burada gösteriyoruz.
// 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, MediatR entegrasyonu için sahneyi hazırlar.
İlk MediatR İsteğinizi ve İşleyicinizi Oluşturma
MediatR talepleri, belirli bir işlemi gerçekleştirmek için gereken verileri temsil eden basit sınıflardır. İşte, yeni bir kullanıcı oluşturma komutunu temsil eden bir talep 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ı, bu talebin bir tamsayı yanıt beklediğini belirten IRequest
Sonraki adımda, bu istek için bir işleyici oluşturmanız gerekmektedir. Her işleyicinin içinde, Handle metodu, 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
MediatR'yi Uygulamanızda Kullanma
MediatR'nin kurulumu sürecini izleyerek, uygulamanızın iş akışına entegre edersiniz. Bu genellikle bir ASP.NET Core uygulamasında bir denetleyici veya uç nokta aracılığıyla yapılır. Bir API denetleyicisi kullanarak bir örnek veriyoruz:
[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 metodu, _mediator.Send(command)'yi çağırarak CreateUserCommand'i MediatR'ye gönderir. MediatR daha sonra bu komut için uygun işleyiciyi bulur ve yürütür. Sonuç döndürülür ve aynı süreçte bir yanıt oluşturmak için kullanılır.
Temel Taleplerin Ötesi: Bildirimler ve Davranışlar
MediatR ayrıca bildirimleri ve davranışları da destekler. Bildirimler, birden fazla işleyicinin abone olup işleyebileceği mesajlardır ve uygulamanız içinde daha olay odaklı bir yaklaşım sağlanmasına olanak tanır. Davranışlar ise, MediatR talepleriniz için bir tür ara katman gibidir, günlük kaydı, doğrulama veya işlem yönetimi gibi kesilmiş kaygıları uygulamanıza izin verir.
IronPDF Kütüphanesi Tanıtımı

IronPDF, uygulamalarında PDF dosyaları oluşturmak, düzenlemek ve bu dosyalarla çalışmak için basit bir yol arayan .NET geliştiricileri için tasarlanmış 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 oluştirebilirler. IronPDF sadece PDF oluşturmaya sınırlı değildir; aynı zamanda PDF'leri düzenleme özellikleri de sunar, örneğin metin, resim ve sayfalar ekleme veya PDF belgelerindeki formları doldurup düzenleme gibi. Geliştiriciler PDF'lerle kapsamlı bir şekilde çalışabilirler, örneğin PDF dosyalarını birleştirme, ayırma ve parolalar ile izinlerle güvence altına alma gibi görevleri gerçekleştirebilirler.
IronPDF, orijinal düzen ve stillerde hassasiyetle koruyarak HTML'den PDF'e dönüştürme konusunda uzmanlaşmıştır. Bu, raporlar, faturalar ve dokümantasyon gibi web tabanlı içeriklerden PDF oluşturmak için idealdir. HTML dosyalarından, URL'lerden ve hatta ham HTML dizelerinden PDF dosyalarına dönüşümü 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 içerik veya metadata formundaki bazı medya içeriklerine veya bilgilerine atıfta bulunduğunu varsayıyoruz. MediatR, IronPDF'in işlevselliğiyle doğrudan ilgili olmadığı için, medyanın bilgilerini veya referanslarını içeren HTML içeriğinden bir PDF oluşturmak iyi bir başlangıç noktası oluşturarak bu konuyu 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 parçasında, htmlContent değişkeninizin HTML formatında medya bilgilerinizi içermesi gerekir. Bu, metin, resimler, videolara bağlantılar veya herhangi bir HTML 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ürecek.

Sonuç

Bu makalede açıklanan adımları izleyerek, MediatR'yi projelerinize entegre etmek için sağlam bir temel oluşturmuş olmalısınız; temel komut ve sorgu işlemeden başlayarak, bildirimler ve davranışlar gibi daha gelişmiş işlevlere faydalanmaya kadar. Uygulamanız büyüyüp evrimleştikçe, MediatR, kod tabanınıza temiz, sürdürülebilir ve ölçeklenebilir kalmanıza yardımcı olacak araçlar ve desenler sunar.
Sonuç olarak, IronPDF gibi farklı kütüphane ve araçları keşfetmek ve entegre etmek, .NET projelerinizi daha da geliştirebilir. IronPDF, gelişmiş PDF özelliklerinin bir ücretsiz deneme sürümü sunmaktadır. Gelişmiş PDF özellikleri gerektiren projeler için, IronPDF'in lisanslama ücretleri $999'dan başlar ve .NET geliştiricileri için uygulamalarının işlevselliklerini genişletmek isteyenlere sağlam bir çözüm sunar.
Sıkça Sorulan Sorular
Mediatr ASP.NET Core projelerine nasıl entegre edilir?
Mediatr'yi bir ASP.NET Core projesine entegre etmek için, Program.cs veya Startup.cs dosyanızda bağımlılık enjeksiyon konteynırına ekleyin. Paket Yöneticisi Konsolu'nu kullanarak Install-Package MediatR komutuyla yükleyebilirsiniz.
Mediatr'da istekler ve işleyiciler hangi rolü oynar?
Mediatr'da, istekler bir işlemin ayrıntılarını kapsar ve işleyiciler bu istekleri gerekli iş mantığını yerine getirerek işler. Bu, uygulamaların bakımını artırarak Komut Sorgu Sorumluluk Ayrımı (CQRS) modelini destekler.
Bildirimler ve davranışlar MediatR'yi nasıl geliştirir?
Mediatr'daki bildirimler, bir mesaj üzerinde birden fazla işleyicinin tepki vermesine izin vererek olay odaklı yaklaşımları teşvik eder. Davranışlar, günlük tutma, doğrulama ve istisna yönetimi gibi çapraz kesen endişeleri ele almak için bir ara katman olarak işlev görür.
.NET uygulamalarında aracı desenini kullanmanın avantajları nelerdir?
Aracı deseni, MediatR tarafından uygulanan aracı deseni, bileşenler arasında doğrudan bağımlılıkları azaltır ve gevşek bağlamayı teşvik eder. Bu, temiz mimari ilkelerine uygun olarak .NET uygulamalarının bakımını ve ölçeklenebilirliğini artırır.
.NET uygulamalarında HTML nasıl PDF'ye dönüştürülür?
IronPDF, HTML'i .NET uygulamalarında PDF'ye dönüştürmeyi sağlar. RenderHtmlAsPdf metodunu HTML dizelerini dönüştürmek veya URL'ler için RenderUrlAsPdf kullanarak, sonuçtaki PDF'de düzenin korunmasını sağlayabilirsiniz.
IronPDF hangi ileri özellikleri PDF yönetimi için sunar?
IronPDF, PDF birleştirme, bölme, düzenleme ve şifreleme gibi ileri düzey PDF yönetim özellikleri sunarak raporlar, faturalar ve diğer dokümantasyonların üretilmesi için idealdir.
Mediatr CQRS modelini nasıl destekler?
Mediatr, komut isteklerini sorgulardan ayırarak CQRS modelini destekler. Bu ayrım, her işlem türünün bağımsız olarak optimize edilip yönetilmesine olanak tanıyarak daha ölçeklenebilir ve sürdürülebilir bir kod sağlar.
.NET projelerinde IronPDF kullanmanın avantajları nelerdir?
IronPDF, HTML'i PDF'ye dönüştürmede tasarımı koruma yeteneği ile .NET projelerinde raporlar ve belgeler oluşturmak için güçlü bir araç sunar.




