web-dev-qa-db-ja.com

新しいDIを使用して、IWebJobsStartupを使用してILoggerをAzure関数に挿入するにはどうすればよいですか?

使っています Azure Function v2。コンストラクターインジェクションを使用する関数は次のとおりです。

public sealed class FindAccountFunction
{
    private readonly IAccountWorkflow m_accountWorkflow;

    private readonly IMapper m_mapper;

    private readonly ILogger m_logger;

    public FindAccountFunction(ILogger logger, IMapper mapper, IAccountWorkflow accountWorkflow)
    {
        m_logger = logger;
        m_mapper = mapper;
        m_accountWorkflow = accountWorkflow;
    }

    [FunctionName("FindAccount")]
    public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, Verbs.Get, Route = "v1/accounts/")] HttpRequest httpRequest, ILogger logger)
    {
        // Do stuff.
    }
}

IWebJobsStartupから派生するスタートアップクラスで、Azure関数に注入するすべての依存関係を宣言しています。

    public sealed class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder webJobsBuilder)
        {
            //  Registers the application settings' class.
            webJobsBuilder.Services.AddSingleton<IApplicationSettings, ApplicationSettings>();

            //  ** Registers the ILogger instance **
            //  ** ?? **

            //  Registers the IMapper instance for the contracts.
            var mapperConfiguration = new MapperConfiguration(cfg => cfg.AddProfile(new MyProfile()));

     webJobsBuilder.Services.AddSingleton(mapperConfiguration.CreateMapper());

            // Registers custom services.
            webJobsBuilder.Services.AddTransient<IStorageService, StorageService>();

            webJobsBuilder.Services.AddTransient<IAccountWorkflow, AccountWorkflow>();
        }
   }

Azure関数は、IAccountWorkflowなど、ILoggerにも依存する他の注入されたサービスを呼び出します。

public sealed class AccountWorkflow : IAccountWorkflow
{  
    public AccountWorkflow(ILogger logger, IStorageService storageService)
    {
        if(logger is null)
            throw new ArgumentNullException();
    }
}

問題は、DIがILogger実装を見つけることができず、null ILoggerが挿入されるため、サービスを解決できないことです。

質問

ILoggerへのIWebJobsStartupの注入を設定するにはどうすればよいですか?

11
Kzrystof

あなたは付け加えられます

  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "default": "Information"
    }
  }

iloggerFactoryを使用する場合、DIを追加する必要なし

0
almbrmg