.NET Azure Functions で依存関係の挿入を使用するUse dependency injection in .NET Azure Functions

Azure Functions では、依存関係の挿入 (DI) ソフトウェア デザイン パターンがサポートされています。これは、クラスと依存関係の間で制御の反転 (IoC) を実現するための技術です。Azure Functions supports the dependency injection (DI) software design pattern, which is a technique for achieving Inversion of Control (IoC) between classes and their dependencies.

Azure Functions は、ASP.NET Core の依存関係の挿入機能の上にビルドされます。Azure Functions builds on top of the ASP.NET Core Dependency Injection features. 関数で使用する前に、ASP.NET Core の依存関係の挿入のサービス、有効期間、デザイン パターンを理解する必要があります。You should understand services, lifetimes, and design patterns of ASP.NET Core dependency injection before using them in functions.

前提条件Prerequisites

依存関係の挿入を使用する前に、Microsoft.Azure.Functions.Extensions NuGet パッケージをインストールする必要があります。Before you can use dependency injection, you must install the Microsoft.Azure.Functions.Extensions NuGet package. このパッケージは、パッケージ コンソールから次のコマンドを実行することでインストールできます。You can install this package by running the following command from the package console:

Install-Package Microsoft.Azure.Functions.Extensions

さらに、バージョン 1.0.28 以降の Microsoft.NET.Sdk.Functions パッケージを使用している必要があります。You must also be using version 1.0.28 of the Microsoft.NET.Sdk.Functions package, or a later version.

サービスを登録するRegistering services

サービスを登録するには、構成メソッドを作成して、IFunctionsHostBuilder インスタンスにコンポーネントを追加します。To register services, you can create a configure method and add components to an IFunctionsHostBuilder instance. Azure Functions ホストにより、IFunctionsHostBuilder が作成され、構成したメソッドに直接渡されます。The Azure Functions host creates an IFunctionsHostBuilder and passes it directly into your configured method.

構成メソッドを登録するには、FunctionsStartup 属性を使用して構成メソッドの種類を指定するアセンブリ属性を追加する必要があります。To register your configure method, you must add an assembly attribute that specifies the type for your configure method using the FunctionsStartup attribute.

[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]

namespace MyNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddHttpClient();
            builder.Services.AddSingleton((s) => {
                return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
            });
            builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();
        }
    }
}

サービスの有効期間Service lifetimes

Azure Function アプリでは、ASP.NET の依存関係の挿入と同じサービスの有効期間 (一時、範囲指定、シングルトン) が提供されます。Azure Function apps provide the same service lifetimes as ASP.NET Dependency Injection, transient, scoped, and singleton.

関数アプリでは、スコープ付きサービスの有効期間は、関数の実行の有効期間に一致します。In a function app, a scoped service lifetime matches a function execution lifetime. スコープ付きサービスは毎回作成されます。Scoped services are created once per execution. 実行中のサービスに対する後続の要求では、そのインスタンスを再利用します。Later requests for that service during the execution reuse that instance. シングルトン サービスの有効期間はホストの有効期間に一致し、そのインスタンスでの関数の実行全体で再利用されます。A singleton service lifetime matches the host lifetime and is reused across function executions on that instance.

接続とクライアント (SqlConnectionCloudBlobClient、または HttpClient) には、シングルトンの有効期間サービスをお勧めします。Singleton lifetime services are recommended for connections and clients, for example a SqlConnection, CloudBlobClient, or HttpClient.

さまざまなサービスの有効期間のサンプルを表示するか、ダウンロードします。View or download a sample of different service lifetimes.

ログ記録サービスLogging services

ご自分のログ記録プロバイダーが必要な場合は、ILoggerProvider を登録する方法をお勧めします。If you need your own logging provider, the recommended way is to register an ILoggerProvider. Application Insights の場合、Functions によって Application Insights が自動的に追加されます。For Application Insights, Functions adds Application Insights automatically for you.

警告

環境によって提供されるものと競合するサービスが登録されるため、サービス コレクションに AddApplicationInsightsTelemetry() を追加しないでください。Do not add AddApplicationInsightsTelemetry() to the services collection as it will register services that will conflict with what is provided by the environment.

関数アプリで提供されるサービスFunction app provided services

関数ホストでは、それ自体で多くのサービスを登録します。The function host will register many services itself. 依存関係を取得するのに安全なサービスは次のとおりです。Below are services that are safe to take a dependency on. 登録や依存にその他のホスト サービスはサポートされていません。Other host services are not supported to register or depend on. 依存関係を取得する必要があるその他のサービスがある場合、GitHub 上でイシューとディスカッションを作成してください。If there are other services you want to take a dependency on, please create an issue and discussion on GitHub.

サービスの種類Service Type 有効期間Lifetime 説明Description
Microsoft.Extensions.Configuration.IConfiguration シングルトンSingleton 実行時の構成Runtime configuration
Microsoft.Azure.WebJobs.Host.Executors.IHostIdProvider シングルトンSingleton ホスト インスタンスの ID を提供する責任があるResponsible for providing the ID of the host instance

ホスト サービスのオーバーライドOverriding Host Services

ホストによって提供されるサービスのオーバーライドは、現在サポートされていません。Overriding services provided by the host is currently not supported. オーバーライドが必要なサービスがある場合、GitHub 上でイシューとディスカッションを作成してください。If there are services you want to overriding, please create an issue and discussion on GitHub.

次の手順Next steps

詳細については、次のリソースを参照してください。For more information, see the following resources: