使っています 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
の注入を設定するにはどうすればよいですか?
あなたは付け加えられます
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
"default": "Information"
}
}
iloggerFactoryを使用する場合、DIを追加する必要なし