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

종속성 주입 컨테이너
-
서비스 등록: 종속성들은 응용 프로그램의 구성 루트에서 DI 컨테이너에 등록됩니다. 이 등록들은 컨테이너가 종속성을 생성 및 관리하는 방법을 지정합니다.
-
종속성 해결: 컴포넌트가 종속성을 요청할 때, DI 컨테이너는 확장 메서드를 사용하는 등록된 유형의 인스턴스를 생성하여 종속성을 해결합니다.
종속성 주입의 유형
- 생성자 주입: 등록된 서비스들은 클래스의 생성자를 통해 제공되며, 이는 가장 일반적이고 권장되는 DI 방법입니다.
- 메소드 주입: 서비스들은 해결되어 메소드의 매개변수로 전달됩니다.
- 속성 주입: 싱글톤 서비스나 스코프된 라이프타임을 가진 서비스는 클래스 속성에 할당될 수 있습니다. 그러나 이 방법은 덜 일반적이며 숨겨진 종속성을 도입할 수 있기 때문에 생성자 주입보다 열등한 것으로 간주됩니다.
DI(종속성 주입)의 라이프타임 이해하기: 스코프, 전이, 싱글톤
- 스코프: 스코프된 종속성들은 요청이나 라이프타임 스코프 당 한 번 생성되며, 이는 하나의 요청이나 작업 내에서 같은 인스턴스를 제공하는 것을 의미합니다. 이 일관성은 웹 요청 동안 안정된 종속성을 유지하기 위해 웹 응용 프로그램에서 특히 유용합니다.
- 전이: 전이 종속성들은 컨테이너에서 요청될 때마다 인스턴스화됩니다. 이는 전이 종속성이 필요할 때마다 새 인스턴스가 생성됨을 의미합니다. 보통 전이 종속성들은 가벼운 무상태 서비스나 컴포넌트에 사용됩니다.
- 싱글톤: 싱글톤 종속성들은 한 번만 인스턴스화되어 응용 프로그램의 전체 라이프타임 동안 공유됩니다. 이는 응용 프로그램의 모든 요청에 대해 같은 싱글톤 종속성 인스턴스가 사용되도록 보장합니다. 싱글톤 종속성들은 보통 응용 프로그램 전체에서 보편적으로 접근 가능해야 하는 상태 유지 서비스나 컴포넌트에 사용됩니다.
설치 Microsoft.Extensions.DependencyInjection 패키지
.NET Core 프로젝트에서 종속성 주입을 사용하려면 먼저 Microsoft.Extensions.DependencyInjection 패키지를 설치해야 합니다. 이는 Visual Studio의 NuGet 패키지 관리자 콘솔에서 다음 명령을 사용하여 수행할 수 있습니다:
스크린샷

예제: 기본 종속성 주입
이 예제에서는 서비스 공급자를 활용하여 서비스를 해결하고 프로그램에 주입할 샘플 앱(콘솔 응용 프로그램)을 만들어 보겠습니다.
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코드 스니펫은 메시지를 보내기 위한 인터페이스 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!");
}
}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이 코드는 서비스를 관리하기 위한 serviceProvider를 설정합니다. IMessageService의 구현체로 ConsoleMessageService를 등록하여 필요한 곳 어디서든 주입할 수 있도록 합니다. Main 메서드는 IMessageService의 인스턴스를 serviceProvider로부터 가져와 콘솔에 메시지를 보내는 데 사용합니다.
출력: 프로그램은 문자열 메시지 'Hello, From Dependency Injection!'을 출력합니다.

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

IronPDF를 종속성 주입과 함께 사용하기
IronPDF 라이브러리를 .NET Core 응용 프로그램에 통합하여 종속성 주입 기능 및 Microsoft.Extensions.DependencyInjection의 확장 메서드를 활용하려면 다음과 같이 진행할 수 있습니다:
- PDF 생성 서비스를 정의할 인터페이스를 생성합니다.
- 그 인터페이스를 구현합니다.
- 확장 메서드를 활용하여 종속성 주입 컨테이너에 서비스를 등록합니다.
- 필요한 대로 응용 프로그램에 서비스를 주입합니다.
인터페이스 정의
PDF 생성 서비스를 정의할 인터페이스를 생성합니다.
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인터페이스 구현
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}");
}
}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서비스 등록
귀하의 Program.cs 클래스에서 의존성 주입을 구성하십시오:
builder.Services.AddSingleton<IPdfService, IronPdfService>();net이 설정은 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
Inherits Controller
Private ReadOnly _pdfService As IPdfService
Public Sub New(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이 설정은 IronPdfService가 Microsoft Extensions Dependency Injection 컨테이너에 의해 생성 및 관리되도록 합니다. 기본 PDF 생성 서비스를 대체 구현하여, 소비 코드에 대한 변경 없이 IPdfService 인터페이스의 대안을 제공함으로써 쉽게 대체할 수 있습니다.
PDF 파일의 스크린샷

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

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


