フッターコンテンツにスキップ
.NETヘルプ

Microsoft.Extensions.DependencyInjection .NET 9(PDFの作業)

Microsoft.Extensions.DependencyInjection は、依存性注入 (DI) を容易にするための Microsoft .NET によって提供される強力なライブラリであり、疎結合を促進し、アプリケーションのテスト容易性を向上させるソフトウェアデザインパターンです。 DI は、多くの場合、.NET Core に組み込まれた DI コンテナや、Autofac、Unity のようなライブラリを使用して実装されます。 DI は、クラスが必要とする依存性(オブジェクト)をクラスに注入するのではなく、クラスがその依存性を生成する方法に関与します。 これは通常、コンストラクター、メソッド、またはプロパティの注入を通じて行われます。

Microsoft.Extensions.DependencyInjection .NET 6 (PDF での作業): 図 1 - Microsoft.Extensions.DependencyInjectionName ドキュメント

依存性注入コンテナ

  1. サービス登録: 依存性は通常、アプリケーションの作曲ルートで DI コンテナに登録されます。 これらの登録は、コンテナが依存性を作成し管理する方法を指定します。

  2. 依存性の解決: コンポーネントが依存性を要求するとき、DI コンテナは拡張メソッドを使用して登録されたタイプのインスタンスを作成することにより依存性を解決します。

依存性注入のタイプ

  • コンストラクター注入: 登録されたサービスはクラスを通じてそのコンストラクターを通じて提供されます。これは最も一般的で推奨される DI の形式です。
  • メソッド注入: サービスは解決され、メソッドにパラメーターとして渡されます。
  • プロパティ注入: シングルトンサービスまたはスコープされたライフタイムを持つサービスは、クラスのプロパティに割り当てられます。 しかし、このアプローチは一般的ではなく、コンストラクター注入よりも劣ると見なされることが多いです。なぜなら、隠れた依存性を招く可能性があるからです。

依存性注入 (DI) におけるライフタイムの理解: スコープ、トランジェント、シングルトン

  1. スコープ: スコープされた依存性は、リクエストまたはライフタイムスコープごとに一度作成され、コンテナは単一のリクエストまたは操作内で同じインスタンスを提供します。 この一貫性は、特に Web アプリケーションで有用であり、スコープされた依存性は Web リクエストを通じて安定した依存性を維持するのに役立ちます。
  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
    }
}
$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!");
    }
}
$vbLabelText   $csharpLabel

このコードは、サービスを管理するための serviceProvider を設定します。 ConsoleMessageServiceIMessageService の実装として登録し、必要な場所に注入できるようにします。 次に、Main メソッドは、 serviceProviderからIMessageServiceのインスタンスを取得し、それを使用してコンソールにメッセージを送信します。

出力: プログラムは文字列メッセージ "Hello, From Dependency Injection!" を表示します。

Microsoft.Extensions.DependencyInjection .NET 6 (PDF の操作): 図 3 - 上記のコードからのコンソール出力

IronPDF: C# PDFライブラリ

IronPDF は、PDF 生成の複雑なプロセスを簡素化し、PDF の操作に関する多くの機能を提供する C# の強力なライブラリであり、HTML から PDF を生成したり、PDF にテキストを追加したり、画像で PDF を編集したり、安全な文書を作成することができます。

Microsoft.Extensions.DependencyInjection .NET 6 (PDF の操作): 図 4 - Microsoft.Extensions.DependencyInjection C# の例 (開発者向けの動作): 図 2 - IronPDF

依存性注入で IronPDF を使用する

Microsoft.Extensions.DependencyInjection の拡張機能および依存性注入機能を利用して、.NET Core アプリケーションに IronPDF ライブラリを統合するには、次の手順に従います。

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

サービスの登録

Program.cs クラスで依存性注入を構成します。

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

このセットアップは、IronPdfService を使用して IPdfService インターフェイスを実装することにより依存性を解決し、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();
    }
}
$vbLabelText   $csharpLabel

このセットアップにより、IronPdfService は Microsoft Extensions Dependency Injection コンテナによって作成および管理されます。 IPdfService インターフェイスの代替実装を提供することで、書き換えなしでデフォルトの PDF 生成サービスを簡単に置き換えることができます。

PDF ファイルのスクリーンショット

Microsoft.Extensions.DependencyInjection .NET 6 (PDF の操作): 図 5 - IronPDFと組み合わせて Microsoft Extensions Dependency Injection コンテナーを使用した出力例

結論

Microsoft.Extensions.DependencyInjection は、依存性注入を実装するための .NET 6 の強力なツールであり、疎結合を促進し、アプリケーションのテストのしやすさを向上させます。 IronPDF を統合することにより、豊富な機能を備えた C# ライブラリを使用して、開発者は容易に包括的な PDF ドキュメントを生成することができます。 IronPDF のライセンス が利用可能です。

よくある質問

Microsoft.Extensions.DependencyInjection の .NET 6 における役割は何ですか?

Microsoft.Extensions.DependencyInjection は、.NET 6 で依存性注入を実装するために使用されるデザインパターンで、サービスのライフタイムと依存性を DI コンテナを使用して管理することにより、疎結合なアプリケーションの作成を支援します。

依存性注入がアプリケーションのテスト性をどのように向上させますか?

依存性注入は、クラスに依存性を注入できるようにすることでテスト性を向上させ、テスト中に実装ではなくモックオブジェクトを容易に代替させることができます。

.NET アプリケーションで依存性注入を使用する利点は何ですか?

.NET アプリケーションで依存性注入を使用する利点には、コードの保守性向上、拡張性、および実行時に依存性を簡単に管理および設定できることが含まれます。

.NET Core アプリケーションで依存性注入をどのように実装しますか?

.NET Core アプリケーションでは、アプリケーションの起動時に DI コンテナでサービスを構成し、必要に応じてコンストラクタまたはメソッドに注入することで依存性注入を実装します。

.NET Core アプリケーションで HTML を PDF に変換するにはどうすればよいですか?

IronPDF の RenderHtmlAsPdf メソッドなどを使用して HTML 文字列や RenderHtmlFileAsPdf メソッドを使用して HTML ファイルを .NET Core アプリケーションで PDF に変換できます。

依存性注入におけるサービスのさまざまなライフタイムとは何であり、これらがアプリケーションの動作にどのように影響を与えますか?

依存性注入におけるサービスのライフタイムには Scoped、Transient、Singleton があります。Scoped サービスはリクエストごとに一度作成され、Transient サービスは要求されるたびに作成され、Singleton サービスは一度作成され、アプリケーション全体で共有されます。

依存性注入を使用して .NET Core プロジェクトに C# PDF ライブラリをどのように統合できますか?

.NET Core プロジェクトに C# PDF ライブラリ like IronPDF を依存性注入を使用して統合するには、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 ライブラリを置き換えることができ、ライブラリを変更することなく消費コードを変更できます。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me