.NET ヘルプ

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

Microsoft.Extensions.DependencyInjection は、Microsoft .NET が提供する強力なライブラリで、依存性注入 (DI) を容易にします。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. スコープ付き: スコープ付きの依存関係は、リクエストまたはライフタイムスコープごとに一度だけ作成され、コンテナは単一のリクエストまたは操作内で同じインスタンスを提供します。 この一貫性はWebアプリケーションで特に有用で、スコープされた依存関係はWebリクエストを通して安定した依存関係を維持するのに役立ちます。

  2. 一時的: 一時的依存関係は、コンテナから要求されるたびにインスタンス化されます。 これは、一時的な依存関係の新しいインスタンスが、必要になるたびに生成されることを意味する。 通常、一時的な依存関係は、軽量でステートレスなサービスやコンポーネントに使用される。

  3. シングルトン: シングルトン依存は一度だけインスタンス化され、アプリケーション全体のライフタイムを通じて共有されます。これにより、アプリケーションの期間中すべてのリクエストで同じインスタンスが使用されることが保証されます。 シングルトン依存関係は、通常、アプリケーション全体で普遍的にアクセスする必要があるステートフルなサービスやコンポーネントに採用されます。

Microsoft.Extensions.DependencyInjection パッケージのインストール

.NET Core プロジェクトで依存性注入を使用し始めるには、まず Microsoft.Extensions.DependencyInjection パッケージ をインストールする必要があります。 これは、Visual StudioのNuGet Package Managerコンソールを使って、以下のコードで行うことができる:

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.DependencyInjection
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

スクリーンショット

Microsoft.Extensions.DependencyInjection .NET 6(PDF操作について):図2 - パッケージをインストールするためにターミナルにコマンドを入力する

例基本的な依存性注入

この例では、サービスプロバイダーを使用してサービスを解決し、それらをプログラムに注入するサンプルアプリ(コンソールアプリケーション)を作成しましょう。

using Microsoft.Extensions.DependencyInjection;
using System;
public interface IMessageService
{
    void SendMessage(string message);
}
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message);
    }
}
using Microsoft.Extensions.DependencyInjection;
using System;
public interface IMessageService
{
    void SendMessage(string message);
}
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードはツールを管理するためのserviceProviderを設定します。 これは、ConsoleMessageServiceツールを追加します。 その後、serviceProviderからIMessageServiceツールを取得し、コンソールに「Hello, Dependency Injection!」というメッセージを送信するために使用します。

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

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

IronPDF: C# PDFライブラリ

IronPDFは強力なC#用ライブラリであり、PDF生成の複雑なプロセスを簡素化し、HTMLからPDFを生成する機能や、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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

インターフェイスの実装

PDFファイルを作成するためにIronPDFを使用してインターフェイスを実装します。

public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key";
        string encodedQuery = HttpUtility.UrlEncode(query);
        string fullUrl = $"{baseUrl}?query={encodedQuery}";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(fullUrl);
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key";
        string encodedQuery = HttpUtility.UrlEncode(query);
        string fullUrl = $"{baseUrl}?query={encodedQuery}";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(fullUrl);
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

登録サービス

Program.csクラスで、依存性注入を設定します:

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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";
        _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";
        _pdfService.GeneratePdf(baseUrl, query, filePath);
        return View();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

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

Microsoft.Extensions.DependencyInjection .NET 6 (PDF処理): 図5 - Microsoft Extensions Dependency Injection コンテナとIronPDFを併用した出力例

結論

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

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
Junit Java(開発者向けの働き方)
次へ >
Ninject .NET Core (開発者のための仕組み)