Altbilgi içeriğine atla
.NET YARDıM

Microsoft.Extensions .DependencyInjection .NET 9 (PDF ile Çalışma)

Microsoft.Extensions.DependencyInjection, Microsoft .NET tarafından sağlanan ve modüler yazılım geliştirme süreçlerinde bağımlılıklardan kaçınmayı ve test edilebilirliği arttırmayı amaçlayan Bağımlılık Enjeksiyonu (DI) yazılım tasarım desenini kolaylaştıran güçlü bir kütüphanedir. DI, genellikle .NET Core yerleşik DI konteyneri 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ı (nesneleri) oluşturmak yerine, bu bağımlılıkları bir sınıfa enjekte etmeyi içerir. Bu genellikle bir yapıcı, yöntem veya özellik enjeksiyonu yoluyla yapılır.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF ile Çalışma): Şekil 1 - Microsoft.Extensions.DependencyInjectionName dokümantasyonu

Bağımlılık Enjeksiyonu Kabı

  1. Servis Kaydı: Bağımlılıklar, genellikle uygulamanın bileşim kökünde bir DI konteynerine kaydedilir. Bu kayıtlar, kapsülün bağımlılıkları nasıl oluşturup yönetmesi gerektiğini belirtir.

  2. Bağımlılığın Çözülmesi: Bir bileşen bir bağımlılık talebinde bulunduğunda, DI kapsülleyicisi bir uzantı metodu kullanan kayıtlı bir tipin bir örneğini oluşturarak bağımlılığı çözer.

Bağımlılık Enjeksiyonu Türleri

Yapıcı İnjeksiyonu: Kayıtlı hizmetler, bir sınıfa yapıcısı aracılığıyla sağlanır ve bu, en yaygın ve önerilen Bağımlılık İnjeksiyonu (DI) biçimidir. Yöntem Enjeksiyonu: Servisler çözülür ve bir metoda parametre olarak aktarılır. Özellik Enjeksiyonu: Singleton servisler veya belirli bir yaşam döngüsüne sahip servisler sınıf özelliklerine atanabilir. Ancak, bu yaklaşım daha az yaygındır ve genellikle yapıcı enjeksiyonuna göre daha düşük olarak değerlendirilir çünkü gizli bağımlılıklara neden olabilir.

Dependency Injection (DI) Ömrünü Anlama: Scoped, Transient ve Singleton

  1. Scoped: "Scoped" bağımlılıklar, her bir istekte veya yaşam ömrü kapsamı boyunca bir kez oluşturulur; yani kapsayıcı aynı istekte veya işlemde aynı örneği sağlar. Bu tutarlılık, kapsamlı bağımlılıkların bir web isteği boyunca kararlı bir bağımlılığı sürdürmeye yardımcı olduğu web uygulamalarında özellikle kullanışlıdır.
  2. Geçici: Geçici bağımlılıklar, konteynerdan her istendiğinde yeniden oluşturulurlar. Bu, geçici bir bağımlılığın her ihtiyaç duyulduğunda yeni bir örneğinin oluşturulduğunu ima eder. Genellikle, geçici bağımlılıklar hafif, durumsuz hizmetler veya bileşenler için kullanılır.
  3. Singleton: Singleton bağımlılıkları, yalnızca bir kez oluşturulur ve uygulamanın tüm ömrü boyunca paylaşılır. Bu, uygulamanın süresi boyunca tüm istekler için singleton bağımlılığın aynı örneğinin kullanılmasını sağlar. Singleton bağımlılıkları, genellikle tüm uygulama genelinde evrensel olarak erişilebilir olması gereken durumsal hizmetler veya bileşenler için kullanılır.

Microsoft.Extensions.DependencyInjection paketi Yükleme

.NET Core projesinde bağımlılık enjeksiyonunu kullanmaya başlamak için, ilk olarak Microsoft.Extensions.DependencyInjection paketini yüklemeniz gerekir. Bu, 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ü

Microsoft.Extensions.DependencyInjection .NET 6 (PDF ile Çalışma): Şekil 2 - Paketi kurmak için terminale komutu yazın

Örnek: Temel Bağımlılık Enjeksiyonu

Bu örnekte, bir hizmet sağlayıcısı kullanarak servisleri çözeceğimiz ve programımıza enjekte edeceğimiz 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
$vbLabelText   $csharpLabel

Kod parçacığı, bir arayüz IMessageService oluşturur, mesaj gönderme konusunda nasıl bir sözleşme yapılacağı gibi. ConsoleMessageService sınıfı, mesajları göndermek için Console.WriteLine kullanarak bu arayüzü uygular. Bu ayrım, mesajların nasıl iletildiğinden bağımsız olarak gönderme konseptinin değiştirilmesine olanak tanır, böylece 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
$vbLabelText   $csharpLabel

Bu kod, hizmetleri yönetmek için bir serviceProvider kurar. Bu, IMessageService için uygulama olarak ConsoleMessageService'yi kaydeder ve gereken her yere enjekte edilebilir hale getirir. Main yöntemi daha sonra IMessageService örneğini serviceProvider'dan alır ve bunu bir mesajı konsola göndermek için kullanır.

Çıktı: Program, "Hello, From Dependency Injection!" mesajını yazdırır.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF ile Çalışma): Şekil 3 - Yukarıdaki koddan konsol çıktısı

IronPDF: C# PDF Kütüphanesi

IronPDF, PDF oluşturma işlemini basitleştiren ve PDF manipülasyonu için geniş bir özellik yelpazesi sunan güçlü bir C# kütüphanesidir. HTML'den PDF oluşturma, PDF'lere metin ekleme ve resimlerle PDF düzenleme, güvenli belgeler oluşturma ve çok daha fazlası gibi yetenekleri içerir.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF ile Çalışma): Şekil 4 - Microsoft.Extensions.DependencyInjection C# Örneği (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronPDF

IronPDF'i Dependency Injection ile Kullanma

IronPDF kütüphanesini, Microsoft.Extensions.DependencyInjection ile uzantı metodları ve bağımlılık enjeksiyon özelliklerinden yararlanarak bir .NET Core uygulamasına entegre etmek için aşağıdaki adımları izleyebilirsiniz:

  1. PDF oluşturma hizmetinizi tanımlamak için bir arayüz oluşturun.
  2. Arabirimi uygulayın.
  3. Bağımlılık enjeksiyon konteynerinde hizmeti kaydetmek için uzantı yöntemlerini kullanın.
  4. Gerekli olduğu şekilde hizmeti uygulamanıza enjekte edin.

Ana Arayüzü Tanımla

PDF oluşturma servisinizi tanımlamak için 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
$vbLabelText   $csharpLabel

Arayüzü Uygula

PDF dosyası oluşturmak 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
$vbLabelText   $csharpLabel

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>();
$vbLabelText   $csharpLabel

Bu kurulum, IPdfService arabirimini IronPdfService ile uygulayarak, PDF oluşturma için bir tekil hizmet türü oluşturarak bağımlılıkları çözer. Bu, daha sonra uygulama boyunca referans alınır ve PDF'lerin oluşturulması için tutarlı bir işlevsellik sağlanır.

Kullanım

IPdfService uygulayıcı 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
$vbLabelText   $csharpLabel

Bu kurulum, IronPdfService'in Microsoft Extensions Dependency Injection konteyneri tarafından oluşturulmasını ve yönetilmesini sağlar. Varsayılan PDF oluşturma hizmetini, IPdfService arabirimi için alternatif bir uygulama sunarak zahmetsizce değiştirebilirsiniz; üstelik bu işlem, tüketici kodunu değiştirmeden yapılabilir.

PDF Dosyasının Ekran Görüntüsü

Microsoft.Extensions.DependencyInjection .NET 6 (PDF ile Çalışma): Şekil 5 - Microsoft Extensions Dependency Injection konteyneri ile birlikte IronPDF kullanarak örnek çıktı

Sonuç

Microsoft.Extensions.DependencyInjection, bağımlılık enjeksiyonunu uygulamak için .NET 6'da güçlü bir araç olup yazılım uygulamalarında gevşek bağlılığı destekler ve test edilebilirliği artırır. IronPDF, zengin özelliklere sahip bir C# kütüphanesi olarak entegre edilerek, geliştiriciler az bir çabayla kolayca kapsamlı PDF belgeleri üretebilirler. IronPDF için Lisanslama mevcuttur.

Sıkça Sorulan Sorular

Microsoft.Extensions.DependencyInjection'ın .NET 6'daki rolü nedir?

Microsoft.Extensions.DependencyInjection .NET 6, Bağımlılık Enjeksiyonu tasarım desenini uygulamak için kullanılır, hizmet ömürlerini yöneterek ve bağımlılıkları bir DI konteyneri kullanarak gevşek bağlı uygulamalar oluşturulmasına yardımcı olur.

Bağımlılık Enjeksiyonu, uygulamalarda test edilebilirliği nasıl artırır?

Bağımlılık Enjeksiyonu, bir sınıfa bağımlılıkların enjekte edilmesine izin vererek test edilebilirliği artırır ve gerçek uygulamalar yerine test sırasında sahte nesnelerin kullanılmasını kolaylaştı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ı arasında iyileştirilmiş kod sürdürülebilirliği, ölçeklenebilirlik ve bağımlılıkların çalıştırma sırasında kolayca yönetilmesi ve konfigüre edilmesi yer alır.

.NET Core uygulamalarında Bağımlılık Enjeksiyonu nasıl uygulanır?

.NET Core uygulamasında, Bağımlılık Enjeksiyonu, uygulama açılışı sırasında DI konteynerde hizmetlerin konfigüre edilmesi ve gerektiğinde yapıcılara veya metodlara enjekte edilmesiyle uygulanır.

.NET Core uygulamalarında HTML nasıl PDF'ye dönüştürülür?

.NET Core uygulamasında, HTML dizileri için RenderHtmlAsPdf veya HTML dosyaları için RenderHtmlFileAsPdf gibi IronPDF metodlarını kullanarak HTML'yi PDF'ye dönüştürebilirsiniz.

Bağımlılık Enjeksiyonu'nda hizmetlerin farklı ömürleri nelerdir ve uygulama davranışını nasıl etkilerler?

Bağımlılık Enjeksiyonu'ndaki hizmet ömürleri Scoped, Transient ve Singleton'dur. Scoped hizmetler her bir istekte bir kez oluşturulur, Transient hizmetler her çağrıldığında oluşturulur, Singleton hizmetler ise bir kez oluşturulup tüm uygulama boyunca paylaşılır.

Bağımlılık Enjeksiyonu kullanarak .NET Core projesine bir C# PDF kütüphanesi nasıl entegre edilir?

Bir .NET Core projesinde Bağımlılık Enjeksiyonu kullanarak IronPDF gibi bir C# PDF kütüphanesini entegre etmek için, PDF servisleri için bir arayüz oluşturmanız, bunu uygulamanız, DI konteynere kaydetmeniz ve gerektiğinde sınıflarınıza enjekte etmeniz gerekir.

Microsoft.Extensions.DependencyInjection paketini kurma süreci nedir?

Microsoft.Extensions.DependencyInjection paketi, Visual Studio'da NuGet Paket Yöneticisi Konsolu kullanılarak Install-Package Microsoft.Extensions.DependencyInjection komutuyla kurulabilir.

IronPDF, Bağımlılık Enjeksiyonu ile nasıl PDF oluşturmak için kullanılabilir?

IronPDF, bir PDF hizmet arayüzü oluşturup, IronPDF metotları ile uygulayarak ve DI konteynere kaydederek Bağımlılık Enjeksiyonu ile kullanılabilir. Hizmet daha sonra URL'lerden veya HTML içerikten PDF'ler oluşturmak için enjekte edilip kullanılabilir.

C# PDF kütüphanesini, tüketici kodunu değiştirmeden, DI kurulumunda ikame edebilir misiniz?

Evet, PDF servisleri için kullanılan arayüze bir alternatif uygulayarak, kullanma kodunu değiştirmeden C# PDF kütüphanesini DI kurulumu içerisinde ikame edebilirsiniz.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara