푸터 콘텐츠로 바로가기
.NET 도움말

Microsoft.Extensions.DependencyInjection .NET 9 (PDF 작업)

Microsoft.Extensions.DependencyInjection은 Microsoft .NET에서 제공하는 강력한 라이브러리로, 종속성 주입(DI)를 용이하게 하여 응용 프로그램의 테스트 용이성을 향상시킵니다. DI는 종종 .NET Core 내장 DI 컨테이너나 Autofac 및 Unity 같은 라이브러리를 사용하여 구현됩니다. DI는 클래스가 그 자신의 종속성을 생성하는 대신 종속성(클래스가 필요로 하는 객체)을 클래스에 주입하는 것을 포함합니다. 이는 보통 생성자, 메소드, 혹은 속성 주입을 통해 이루어집니다.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF 작업): 그림 1 - Microsoft.Extensions.DependencyInjectionName 문서

종속성 주입 컨테이너

  1. 서비스 등록: 종속성들은 응용 프로그램의 구성 루트에서 DI 컨테이너에 등록됩니다. 이 등록들은 컨테이너가 종속성을 생성 및 관리하는 방법을 지정합니다.

  2. 종속성 해결: 컴포넌트가 종속성을 요청할 때, DI 컨테이너는 확장 메서드를 사용하는 등록된 유형의 인스턴스를 생성하여 종속성을 해결합니다.

종속성 주입의 유형

  • 생성자 주입: 등록된 서비스들은 클래스의 생성자를 통해 제공되며, 이는 가장 일반적이고 권장되는 DI 방법입니다.
  • 메소드 주입: 서비스들은 해결되어 메소드의 매개변수로 전달됩니다.
  • 속성 주입: 싱글톤 서비스나 스코프된 라이프타임을 가진 서비스는 클래스 속성에 할당될 수 있습니다. 그러나 이 방법은 덜 일반적이며 숨겨진 종속성을 도입할 수 있기 때문에 생성자 주입보다 열등한 것으로 간주됩니다.

DI(종속성 주입)의 라이프타임 이해하기: 스코프, 전이, 싱글톤

  1. 스코프: 스코프된 종속성들은 요청이나 라이프타임 스코프 당 한 번 생성되며, 이는 하나의 요청이나 작업 내에서 같은 인스턴스를 제공하는 것을 의미합니다. 이 일관성은 웹 요청 동안 안정된 종속성을 유지하기 위해 웹 응용 프로그램에서 특히 유용합니다.
  2. 전이: 전이 종속성들은 컨테이너에서 요청될 때마다 인스턴스화됩니다. 이는 전이 종속성이 필요할 때마다 새 인스턴스가 생성됨을 의미합니다. 보통 전이 종속성들은 가벼운 무상태 서비스나 컴포넌트에 사용됩니다.
  3. 싱글톤: 싱글톤 종속성들은 한 번만 인스턴스화되어 응용 프로그램의 전체 라이프타임 동안 공유됩니다. 이는 응용 프로그램의 모든 요청에 대해 같은 싱글톤 종속성 인스턴스가 사용되도록 보장합니다. 싱글톤 종속성들은 보통 응용 프로그램 전체에서 보편적으로 접근 가능해야 하는 상태 유지 서비스나 컴포넌트에 사용됩니다.

설치 Microsoft.Extensions.DependencyInjection 패키지

.NET Core 프로젝트에서 종속성 주입을 사용하려면 먼저 Microsoft.Extensions.DependencyInjection 패키지를 설치해야 합니다. 이는 Visual Studio의 NuGet 패키지 관리자 콘솔에서 다음 명령을 사용하여 수행할 수 있습니다:

Install-Package Microsoft.Extensions.DependencyInjection

스크린샷

Microsoft.Extensions.DependencyInjection .NET 6 (PDF 작업): 그림 2 - 패키지를 설치하기 위해 터미널에 명령어 입력

예제: 기본 종속성 주입

이 예제에서는 서비스 공급자를 활용하여 서비스를 해결하고 프로그램에 주입할 샘플 앱(콘솔 응용 프로그램)을 만들어 보겠습니다.

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

이 코드 스니펫은 메시지를 보내는 인터페이스 IMessageService를 생성하여 메시지가 어떤 방식으로 보내져야 하는지에 대한 계약서와 같다. 이 ConsoleMessageService 클래스는 메시지를 보내기 위해 Console.WriteLine를 사용하여 이 인터페이스를 구현한다. 이 분리는 메시지를 전송하는 개념을 변경할 수 있어 시스템을 유연하고 관리 가능하게 합니다.

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

이 코드는 서비스를 관리하기 위한 serviceProvider를 설정합니다. IMessageService의 구현체로 ConsoleMessageService를 등록하여 필요한 곳 어디서든 주입할 수 있도록 합니다. 그런 다음 Main 메소드는 IMessageService의 인스턴스를 serviceProvider에서 가져와 이를 사용하여 메시지를 콘솔에 보낸다.

출력: 프로그램은 문자열 메시지 'Hello, From Dependency Injection!'을 출력합니다.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF 작업): 그림 3 - 위 코드로부터의 콘솔 출력

IronPDF: C# PDF 라이브러리

IronPDF는 PDF 생성을 간소화하며, HTML에서 PDF 생성, PDF에 텍스트를 추가하고 이미지를 사용하여 PDF 편집하는 등 PDF 조작을 위한 다양한 기능을 제공하는 C#용 강력한 라이브러리입니다.

Microsoft.Extensions.DependencyInjection .NET 6 (PDF 작업): 그림 4 - Microsoft.Extensions.DependencyInjection C# 예제 (개발자를 위한 작동 방식): 그림 2 - IronPDF

IronPDF를 종속성 주입과 함께 사용하기

IronPDF 라이브러리를 .NET Core 응용 프로그램에 통합하여 종속성 주입 기능 및 Microsoft.Extensions.DependencyInjection의 확장 메서드를 활용하려면 다음과 같이 진행할 수 있습니다:

  1. PDF 생성 서비스를 정의할 인터페이스를 생성합니다.
  2. 그 인터페이스를 구현합니다.
  3. 확장 메서드를 활용하여 종속성 주입 컨테이너에 서비스를 등록합니다.
  4. 필요한 대로 응용 프로그램에 서비스를 주입합니다.

인터페이스 정의

PDF 생성 서비스를 정의할 인터페이스를 생성합니다.

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

인터페이스 구현

IronPDF를 사용하여 PDF 파일을 생성하는 인터페이스를 구현하십시오.

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

서비스 등록

자신의 Program.cs 클래스에, 의존성 주입을 구성하십시오:

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
$vbLabelText   $csharpLabel

이 설정은 IPdfService 인터페이스를 IronPdfService로 구현하여, PDF 생성을 위한 단일 서비스 유형을 확립함으로써 종속성을 해결합니다. 그런 다음 응용 프로그램 전체에서 참조되어, 일관된 PDF 생성 기능을 보장합니다.

사용법

컨트롤러나 서비스에 IPdfService를 주입하고 사용하십시오:

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

이 설정은 IronPdfService가 Microsoft Extensions Dependency Injection 컨테이너에 의해 생성 및 관리되도록 합니다. 기본 PDF 생성 서비스를 대체 구현하여, 소비 코드에 대한 변경 없이 IPdfService 인터페이스의 대안을 제공함으로써 쉽게 대체할 수 있습니다.

PDF 파일의 스크린샷

Microsoft.Extensions.DependencyInjection .NET 6 (PDF 작업): 그림 5 - Microsoft Extensions Dependency Injection 컨테이너를 IronPDF와 함께 사용한 예제 출력

결론

Microsoft.Extensions.DependencyInjection은 .NET 6에서 종속성 주입을 구현하기 위해 강력한 도구이며, 이는 느슨한 결합을 촉진하고 애플리케이션의 테스팅 가능성을 향상시킵니다. 다양한 기능을 갖춘 C# 라이브러리 IronPDF를 통합함으로써, 개발자는 손쉽게 포괄적인 PDF 문서를 최소한의 노력으로 생성할 수 있습니다. IronPDF의 라이센스는 사용할 수 있습니다.

자주 묻는 질문

.NET 6에서 Microsoft.Extensions.DependencyInjection의 역할은 무엇입니까?

.NET 6에서 Microsoft.Extensions.DependencyInjection은 DI 컨테이너를 사용하여 서비스 수명과 의존성을 관리함으로써 느슨하게 결합된 애플리케이션을 생성하는데 도움이 되는 의존성 주입 디자인 패턴을 구현하는데 사용됩니다.

의존성 주입이 애플리케이션의 테스트 가능성을 어떻게 향상시킬 수 있습니까?

의존성 주입은 클래스에 의존성을 주입함으로써 테스트 시 실제 구현 대신 모의 객체를 쉽게 대체할 수 있도록 하여 테스트 가능성을 향상시킵니다.

.NET 애플리케이션에서 의존성 주입을 사용하는 장점은 무엇입니까?

.NET 애플리케이션에서 의존성 주입을 사용하는 장점은 코드 유지 관리성 향상, 확장성 증가, 런타임에 의존성을 쉽게 관리하고 구성할 수 있는 능력입니다.

.NET Core 애플리케이션에서 의존성 주입을 어떻게 구현합니까?

.NET Core 애플리케이션에서 의존성 주입은 애플리케이션 시작 시 DI 컨테이너에서 서비스를 구성하고 필요에 따라 생성자나 메서드에 주입함으로써 구현됩니다.

.NET Core 애플리케이션에서 HTML을 PDF로 변환하는 방법은 무엇입니까?

IronPDF의 RenderHtmlAsPdf와 같은 메서드를 사용하여 HTML 문자열을, RenderHtmlFileAsPdf를 사용하여 HTML 파일을 변환할 수 있습니다.

의존성 주입에서 서비스의 수명이 다를 경우 애플리케이션 동작에 어떻게 영향을 미칩니까?

의존성 주입에서 서비스 수명은 Scoped, Transient, Singleton으로 나뉩니다. Scoped 서비스는 요청당 한 번 생성되며, Transient 서비스는 요청될 때마다 생성되고, Singleton 서비스는 한 번 생성되어 애플리케이션 전체에서 공유됩니다.

의존성 주입을 사용하여 .NET Core 프로젝트 내에서 C# PDF 라이브러리를 어떻게 통합할 수 있습니까?

IronPDF와 같은 C# PDF 라이브러리를 의존성 주입을 사용하여 .NET Core 프로젝트에 통합하려면 PDF 서비스용 인터페이스를 만들고, 이를 구현하며, DI 컨테이너에 서비스를 등록하고 필요에 따라 클래스에 주입하면 됩니다.

Microsoft.Extensions.DependencyInjection 패키지를 설치하는 과정은 무엇입니까?

Microsoft.Extensions.DependencyInjection 패키지는 Visual Studio의 NuGet 패키지 관리자 콘솔에서 Install-Package Microsoft.Extensions.DependencyInjection 명령을 사용하여 설치할 수 있습니다.

IronPDF를 의존성 주입과 함께 사용하여 PDF를 생성하는 방법은 무엇입니까?

IronPDF는 PDF 서비스 인터페이스를 설정하고 이를 IronPDF 메서드로 구현하여 DI 컨테이너에 등록하여 의존성 주입과 함께 사용할 수 있습니다. 그런 후 서비스를 주입받아 URL이나 HTML 콘텐츠로부터 PDF를 생성할 수 있습니다.

소비 코드를 변경하지 않고 DI 설정에서 C# PDF 라이브러리를 대체할 수 있습니까?

네, PDF 서비스에 사용된 인터페이스에 대한 대안을 구현하여 DI 설정에서 소비 코드를 변경하지 않고 C# PDF 라이브러리를 교체할 수 있습니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해