Microsoft.Extensions .DependencyInjection .NET 9 (PDF ile Çalışma)
Microsoft.Extensions.DependencyInjection, Microsoft .NET tarafından sağlanan güçlü bir kütüphanedir ve uygulamalarda zayıf bağlılığı teşvik eden ve test edilebilirliği artıran bir yazılım tasarım deseni olan Bağımlılık Enjeksiyonu'nu (DI) kolaylaştırır. DI genellikle .NET Core yerleşik DI konteynırı veya Autofac ve Unity gibi kütüphaneler kullanılarak uygulanır. DI, bir sınıfın ihtiyaç duyduğu bağımlılıkları (nesneler) sınıfa enjekte etmeyi, sınıfın kendi bağımlılıklarını oluşturmaktan ziyade içerir. Bu genellikle bir yapıcı, yöntem veya özellik enjeksiyonu ile yapılır.

Bağımlılık Enjeksiyon Konteynırı
-
Hizmet Kaydı: Bağımlılıklar, genellikle uygulamanın kompozisyon köklerinde bir DI konteynırına kaydedilir. Bu kayıtlar, konteynırın bağımlılıkları nasıl oluşturması ve yönetmesi gerektiğini belirtir.
- Bağımlılık Çözümü: Bir bileşen bir bağımlılık talep ettiğinde, DI konteynırı bağımlılığı, bir uzatma yöntemi kullanan bir kayıtlı tipin örneğini oluşturarak çözer.
Bağımlılık Enjeksiyon Türleri
- Yapıcı Enjeksiyonu: Kayıtlı hizmetler, en yaygın ve önerilen DI biçimi olan yapıcısı aracılığıyla bir sınıfa sağlanır.
- Yöntem Enjeksiyonu: Hizmetler, bir yönteme parametreler olarak çözülür ve geçirilir.
- Özellik Enjeksiyonu: Tekil hizmetler veya ömürlü hizmetler sınıf özelliklerine atanabilir. Ancak, bu yaklaşım daha az yaygındır ve genellikle yapıcı enjeksiyonuna göre daha düşük nitelikli kabul edilir çünkü gizli bağımlılıklar yaratabilir.
Bağımlılık Enjeksiyonunda Ömürleri Anlama: Scoped, Geçici ve Tekil
- Scoped: Scoped bağımlılıklar, talep başına veya ömür kapsamına göre bir kez oluşturulur, yani konteynır, tek bir talep veya işlem sırasında aynı örneği elde eder. Bu tutarlılık, web uygulamalarında özellikle yararlıdır; scoped bağımlılıklar, web talebi boyunca istikrarlı bir bağımlılık sağlamaya yardımcı olur.
- Geçici: Geçici bağımlılıklar, konteynırdan her talep edildiğinde başlatılır. Bu, geçici bir bağımlılığın, her ihtiyaç duyulduğunda yeni bir örneğinin oluşturulacağı anlamına gelir. Genellikle, geçici bağımlılıklar hafif, durumsuz hizmet veya bileşenler için kullanılır.
- Tekil: Tekil bağımlılıklar yalnızca bir kere başlatılır ve tüm uygulamanın ömrü boyunca paylaşılır. Bu, uygulamanın ömrü boyunca tüm talepler için tekil bağımlılığın aynı örneği kullanılmasını sağlar. Tekil bağımlılıklar genellikle uygulamanın tamamına genel olarak erişilebilir olması gereken durumlu hizmet veya bileşenler için kullanılır.
Kurulum Microsoft.Extensions.DependencyInjection paketi
Bir .NET Core projesinde bağımlılık enjeksiyonunu kullanmaya başlamak için öncelikle Microsoft.Extensions.DependencyInjection paketini yüklemeniz gerekir. Bu işlem, Visual Studio'daki NuGet Paket Yöneticisi Konsolu üzerinden aşağıdaki komut ile yapılabilir.
Install-Package Microsoft.Extensions.DependencyInjection
Ekran Görüntüsü

Örnek: Temel Bağımlılık Enjeksiyonu
Bu örnekte, hizmet sağlayıcısını çözümlemek için hizmet sağlayıcısını kullanacağımız bir örnek uygulama (konsol uygulaması) oluşturalım.
using Microsoft.Extensions.DependencyInjection;
using System;
// Define a service interface
public interface IMessageService
{
void SendMessage(string message);
}
// Implement the service interface
public class ConsoleMessageService : IMessageService
{
public void SendMessage(string message)
{
Console.WriteLine(message); // Output the message to the console
}
}
using Microsoft.Extensions.DependencyInjection;
using System;
// Define a service interface
public interface IMessageService
{
void SendMessage(string message);
}
// Implement the service interface
public class ConsoleMessageService : IMessageService
{
public void SendMessage(string message)
{
Console.WriteLine(message); // Output the message to the console
}
}
Imports Microsoft.Extensions.DependencyInjection
Imports System
' Define a service interface
Public Interface IMessageService
Sub SendMessage(ByVal message As String)
End Interface
' Implement the service interface
Public Class ConsoleMessageService
Implements IMessageService
Public Sub SendMessage(ByVal message As String) Implements IMessageService.SendMessage
Console.WriteLine(message) ' Output the message to the console
End Sub
End Class
Kod parçası, mesaj göndermek için bir arayüz IMessageService oluşturur, mesajların nasıl gönderilmesi gerektiğine dair bir sözleşme gibi. Console.WriteLine kullanarak mesaj göndermek için bu arayüzü uygulayanConsoleMessageService sınıfı. Bu ayrım, mesaj gönderme konseptinin, nasıl gönderildiğinden bağımsız olarak değiştirilebilmesine olanak tanır, bu da sistemi esnek ve yönetilebilir hale getirir.
class Program
{
static void Main(string[] args)
{
// Create a service provider
var serviceProvider = new ServiceCollection()
// Register the service implementation
.AddTransient<IMessageService, ConsoleMessageService>()
.BuildServiceProvider();
// Resolve the service
var messageService = serviceProvider.GetRequiredService<IMessageService>();
// Use the service to send a message
messageService.SendMessage("Hello, From Dependency Injection!");
}
}
class Program
{
static void Main(string[] args)
{
// Create a service provider
var serviceProvider = new ServiceCollection()
// Register the service implementation
.AddTransient<IMessageService, ConsoleMessageService>()
.BuildServiceProvider();
// Resolve the service
var messageService = serviceProvider.GetRequiredService<IMessageService>();
// Use the service to send a message
messageService.SendMessage("Hello, From Dependency Injection!");
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create a service provider
Dim serviceProvider = (New ServiceCollection()).AddTransient(Of IMessageService, ConsoleMessageService)().BuildServiceProvider()
' Resolve the service
Dim messageService = serviceProvider.GetRequiredService(Of IMessageService)()
' Use the service to send a message
messageService.SendMessage("Hello, From Dependency Injection!")
End Sub
End Class
Bu kod, hizmetleri yönetmek için bir serviceProvider kurar. IMessageService için uygulama olarak ConsoleMessageService kaydederek gereklilik doğduğunda enjekte edilmesini sağlar. Main yöntemi, daha sonra serviceProvider'dan bir IMessageService örneği alır ve bunu konsola bir mesaj göndermek için kullanır.
Çıktı: Program "Hello, From Dependency Injection!" string mesajını yazdırır.

IronPDF: C# PDF Kütüphanesi
IronPDF , PDF oluşturmanın karmaşık süreçlerini basitleştiren ve HTML'den PDF'ler oluşturma, PDF'lere metin ekleme ve resimlerle PDF'leri düzenleme, güvenli belgeler oluşturma ve daha birçok özellik sunan güçlü bir C# kütüphanesidir.

Bağımlılık Enjeksiyonu ile IronPDF Kullanma
Microsoft.Extensions.DependencyInjection ile bağımlılık enjeksiyonu özelliklerinden ve uzantı yöntemlerinden yararlanarak IronPDF kütüphanesini bir .NET Core uygulamasına entegre etmek için şu adımları izleyebilirsiniz:
- PDF oluşturma hizmetinizi tanımlamak için bir arayüz oluşturun.
- Arayüzü uygulayın.
- Bağımlılık enjeksiyonu konteynırına hizmeti kaydetmek için uzantı yöntemlerini kullanın.
- Gereken yerlerde uygulamanıza hizmeti enjekte edin.
Arayüz Tanımlama
PDF oluşturma hizmetinizi tanımlayan bir arayüz oluşturun.
public interface IPdfService
{
void GeneratePdf(string baseUrl, string query, string filePath);
}
public interface IPdfService
{
void GeneratePdf(string baseUrl, string query, string filePath);
}
Public Interface IPdfService
Sub GeneratePdf(baseUrl As String, query As String, filePath As String)
End Interface
Arayüz Uygulaması
PDF dosyası oluşturma işlemi için IronPDF kullanarak arayüzü uygulayın.
using IronPdf;
using System;
using System.Web;
// Implement the PDF generation interface
public class IronPdfService : IPdfService
{
public void GeneratePdf(string baseUrl, string query, string filePath)
{
License.LicenseKey = "Your-License-Key"; // Set the IronPDF license key
string encodedQuery = HttpUtility.UrlEncode(query); // Encode the query string
string fullUrl = $"{baseUrl}?query={encodedQuery}"; // Construct the full URL
var renderer = new ChromePdfRenderer(); // Create a PDF renderer
var pdf = renderer.RenderUrlAsPdf(fullUrl); // Render the PDF from the URL
pdf.SaveAs(filePath); // Save the PDF to the specified file path
Console.WriteLine($"PDF successfully created from: {fullUrl}");
Console.WriteLine($"Saved to: {filePath}");
}
}
using IronPdf;
using System;
using System.Web;
// Implement the PDF generation interface
public class IronPdfService : IPdfService
{
public void GeneratePdf(string baseUrl, string query, string filePath)
{
License.LicenseKey = "Your-License-Key"; // Set the IronPDF license key
string encodedQuery = HttpUtility.UrlEncode(query); // Encode the query string
string fullUrl = $"{baseUrl}?query={encodedQuery}"; // Construct the full URL
var renderer = new ChromePdfRenderer(); // Create a PDF renderer
var pdf = renderer.RenderUrlAsPdf(fullUrl); // Render the PDF from the URL
pdf.SaveAs(filePath); // Save the PDF to the specified file path
Console.WriteLine($"PDF successfully created from: {fullUrl}");
Console.WriteLine($"Saved to: {filePath}");
}
}
Imports IronPdf
Imports System
Imports System.Web
' Implement the PDF generation interface
Public Class IronPdfService
Implements IPdfService
Public Sub GeneratePdf(ByVal baseUrl As String, ByVal query As String, ByVal filePath As String)
License.LicenseKey = "Your-License-Key" ' Set the IronPDF license key
Dim encodedQuery As String = HttpUtility.UrlEncode(query) ' Encode the query string
Dim fullUrl As String = $"{baseUrl}?query={encodedQuery}" ' Construct the full URL
Dim renderer = New ChromePdfRenderer() ' Create a PDF renderer
Dim pdf = renderer.RenderUrlAsPdf(fullUrl) ' Render the PDF from the URL
pdf.SaveAs(filePath) ' Save the PDF to the specified file path
Console.WriteLine($"PDF successfully created from: {fullUrl}")
Console.WriteLine($"Saved to: {filePath}")
End Sub
End Class
Hizmeti Kaydet
Program.cs sınıfınızda, bağımlılık enjeksiyonunu yapılandırın:
builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
Bu yapılandırma, PDF oluşturma için IPdfService arayüzünü IronPdfService ile uygulayarak bağımlılıkları çözer ve PDF oluşturma için tekil bir hizmet türü kurar. Uygulama boyunca referans alınarak, PDF oluşturma işlemlerinde tutarlı bir işlevsellik sağlar.
Kullanım
IPdfService hizmetini kontrolcünüze veya hizmetinize enjekte edin ve kullanın:
public class MyController : Controller
{
private readonly IPdfService _pdfService;
public MyController(IPdfService pdfService)
{
_pdfService = pdfService;
}
public IActionResult GeneratePdf()
{
string baseUrl = "https://ironpdf.com/";
string query = "Hello World from IronPDF !";
string filePath = "Demo.pdf";
// Use the injected PDF service to generate a PDF
_pdfService.GeneratePdf(baseUrl, query, filePath);
return View();
}
}
public class MyController : Controller
{
private readonly IPdfService _pdfService;
public MyController(IPdfService pdfService)
{
_pdfService = pdfService;
}
public IActionResult GeneratePdf()
{
string baseUrl = "https://ironpdf.com/";
string query = "Hello World from IronPDF !";
string filePath = "Demo.pdf";
// Use the injected PDF service to generate a PDF
_pdfService.GeneratePdf(baseUrl, query, filePath);
return View();
}
}
Public Class MyController
Inherits Controller
Private ReadOnly _pdfService As IPdfService
Public Sub New(ByVal pdfService As IPdfService)
_pdfService = pdfService
End Sub
Public Function GeneratePdf() As IActionResult
Dim baseUrl As String = "https://ironpdf.com/"
Dim query As String = "Hello World from IronPDF !"
Dim filePath As String = "Demo.pdf"
' Use the injected PDF service to generate a PDF
_pdfService.GeneratePdf(baseUrl, query, filePath)
Return View()
End Function
End Class
Bu kurulum, IronPdfService'in Microsoft Sonat Şirketleri Bağımlılık Enjeksiyonu konteynırı tarafından oluşturulmasını ve yönetilmesini sağlar. IPdfService arayüzü için alternatif bir uygulama sunarak varsayılan PDF oluşturma hizmetini zahmetsizce değiştirebilirsiniz, bu da tüketici kodunu değiştirmeden yapabilirsiniz.
PDF Dosyasının Ekran Görüntüsü

Sonuç
Microsoft.Extensions.DependencyInjection, .NET 6'da bağımlılık enjeksiyonu uygulamak için güçlü bir araç olup, bu da uygulamalarda zayıf bağlılığı teşvik eder ve test edilebilirliği artırır. Zengin özelliklere sahip bir C# kütüphanesi olan IronPDF'yi entegre ederek, geliştiriciler kapsamlı PDF belgelerini minimum çaba ile kolayca oluşturabilir. IronPDF için lisanslama mevcuttur.
Sıkça Sorulan Sorular
.NET 6'da Microsoft.Extensions.DependencyInjection'ın rolü nedir?
.NET 6'da Microsoft.Extensions.DependencyInjection, servis ömürlerini ve bağımlılıklarını bir DI kapsayıcı kullanarak yöneterek, bağımsız uygulamalar oluşturmaya yardımcı olan bir tasarım deseni olan Bağımlılık Enjeksiyonu'nu uygulamak için kullanılır.
Bağımlılık Enjeksiyonu, uygulamalarda test edilebilirliği nasıl artırır?
Bağımlılık Enjeksiyonu, sınıfa bağımlılıkların enjekte edilmesine olanak tanır, bu da test sırasında gerçek implementasyonlar yerine sahte nesnelerin kullanılmasını kolaylaştırarak test edilebilirliği artırır.
.NET uygulamalarında Bağımlılık Enjeksiyonu kullanmanın faydaları nelerdir?
.NET uygulamalarında Bağımlılık Enjeksiyonu kullanmanın faydaları, geliştirilmiş kod bakımı, ölçeklenebilirlik ve çalışma zamanında bağımlılıkları kolayca yönetme ve yapılandırma yeteneğini içerir.
.NET Core uygulamasına Bağımlılık Enjeksiyonu nasıl uygulanır?
.NET Core uygulamasında, Bağımlılık Enjeksiyonu, uygulama başlatma sırasında DI kapsayıcısında servislerin yapılandırılması ve gerektiğinde yapıcılara veya yöntemlere enjekte edilmesi ile uygulanır.
.NET Core uygulamasında HTML'yi PDF'e nasıl dönüştürürsünüz?
.NET Core uygulamasında HTML'yi PDF'e dönüştürmek için IronPDF'nin RenderHtmlAsPdf gibi metodlarını HTML dizeleri için veya RenderHtmlFileAsPdf metodunu HTML dosyaları için kullanabilirsiniz.
Bağımlılık Enjeksiyonu'nda hizmetlerin farklı ömür süreleri nelerdir ve uygulama davranışını nasıl etkilerler?
Bağımlılık Enjeksiyonu'nda hizmet ömürleri Scoped, Transient ve Singleton'dır. Scoped hizmetler her istek başına bir kez oluşturulur, Transient hizmetler her istendiğinde oluşturulur ve Singleton hizmetler bir kez oluşturulur ve uygulama boyunca paylaşılır.
.NET Core projesinde Bağımlılık Enjeksiyonu kullanarak bir C# PDF kütüphanesi nasıl entegre edilir?
.NET Core projesinde IronPDF gibi bir C# PDF kütüphanesini Bağımlılık Enjeksiyonu ile entegre etmek için bir PDF servis arayüzü oluşturmalı, onu uygulamalı, hizmeti DI kapsayıcısında kaydetmeli ve gerektiğinde sınıflarınıza enjekte etmelisiniz.
Microsoft.Extensions.DependencyInjection paketinin kurulma süreci nedir?
Microsoft.Extensions.DependencyInjection paketi, Visual Studio'da NuGet Paket Yöneticisi Konsolu kullanılarak şu komutla yüklenebilir: Install-Package Microsoft.Extensions.DependencyInjection.
IronPDF, PDF oluşturma için Bağımlılık Enjeksiyonu ile nasıl kullanılabilir?
IronPDF, bir PDF servis arayüzü oluşturularak, IronPDF metodları ile uygulanarak ve DI kapsayıcısına kaydedilerek Bağımlılık Enjeksiyonu ile kullanılabilir. Servis daha sonra enjekte edilerek URL'lerden veya HTML içeriğinden PDF oluşturmak için kullanılabilir.
Tüketici kodunu değiştirmeden DI düzenlemelerinde bir C# PDF kütüphanesini değiştirebilir misiniz?
Evet, DI düzenlemelerinde, PDF servisleri için kullanılan arayüzün alternatif bir uygulamasını yaparak bir C# PDF kütüphanesini değiştirebilirsiniz, bu da kütüphaneleri değiştirmeye olanak tanır.




