.NET ヘルプ

Microsoft.Extensions .DependencyInjection .NET 6 (PDFでの作業)

公開済み 2024年8月13日
共有:

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

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

依存性注入コンテナ

  1. サービス登録: 依存関係はDIコンテナに登録され、通常はアプリケーションのコンポジションルートに登録される。 これらの登録は、コンテナが依存関係をどのように作成し、管理すべきかを指定する。

  2. 依存関係の解決:コンポーネントが依存関係を要求すると、DIコンテナは、拡張メソッドを使用する登録型のインスタンスを作成することによって、依存関係を解決する。

依存性注入の種類

  • コンストラクタ注入: 登録されたサービスは、コンストラクタを通してクラスに提供される。
  • メソッド・インジェクション: サービスは解決され、メソッドのパラメータとして渡される。 プロパティ・インジェクション:シングルトン・サービスまたはスコープされたライフタイムを持つサービスがクラスに割り当てられる。
  • プロパティ・インジェクション: シングルトン・サービスや、ライフタイムがスコープされたサービスは、クラスのプロパティに割り当てることができます。 しかし、この方法はあまり一般的ではなく、隠れた依存関係を引き起こす可能性があるため、コンストラクタ注入よりも劣っているとみなされることが多い。

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

  1. Scoped:スコープされた依存関係は、リクエストまたはライフタイムスコープごとに1回作成されます。 この一貫性はWebアプリケーションで特に有用で、スコープされた依存関係はWebリクエストを通して安定した依存関係を維持するのに役立ちます。

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

  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
VB   C#

スクリーンショット

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
VB   C#

このコード・スニペットは、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
VB   C#

このコードは、ツールを管理するためのserviceProviderをセットアップする。 これは、ConsoleMessageService ツールを追加するものである。 そして、serviceProviderからIMessageServiceツールを取得し、それを使って「Hello, Dependency Injection」というメッセージを送信する。!コンソールに出力します。

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

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

IronPDF: C# PDFライブラリ

IronPDFは、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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

インターフェイスの実装

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
VB   C#

登録サービス

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

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

このセットアップでは、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
VB   C#

この設定により、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のライセンスが利用できる。

< 以前
Junit Java(開発者向けの働き方)
次へ >
Ninject .NET Core (開発者のための仕組み)