c# - ILogger 通过 Azure Function 2.x 的 Http 触发函数的构造函数注入
问题描述
ILogger
可以注入函数参数,如Token
下面的方法。
但是,将其注入构造函数参数时发生以下错误log
。
[07/03/2019 17:15:17] 执行“令牌”(失败,Id=4e22b21f-97f0-4ab4-8f51-8651b 09aedc8)[07/03/2019 17:15:17] Microsoft.Extensions.DependencyInjection。抽象:尝试激活“功能”时,无法解析“Microsoft.Extensions.Logging.ILogger”类型的服务。
ILogger
可以注入Token
下面的函数参数。但是上面的错误是在注入到构造函数参数时发生的log
。
public class Functions
{
private HttpClient _httpClient;
private IAppSettings _appSettings;
private ILogger _log;
public Functions(HttpClient httpClient, IAppSettings appSettings //working for these two
, ILogger log //not working, errors
)
{
_log = log;
}
[FunctionName("Token")]
public async Task<IActionResult> Token(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Token")]
HttpRequest httpRequest,
ILogger log)
{
}
}
下面的依赖注入
[assembly: WebJobsStartup(typeof(Startup))]
namespace MyApp
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddHttpClient();
builder.Services.AddTransient<IAppSettings, AppSettings>();
//builder.Services.AddLogging(); //not working
//builder.Services.AddSingleton<ILogger>() //not working
}
}
视觉工作室 2017
解决方案
我也有这个问题。我可以通过调用来修复它AddLogging()
:
[assembly: WebJobsStartup(typeof(Startup))]
namespace MyApp
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddHttpClient();
builder.Services.AddTransient<IAppSettings, AppSettings>();
builder.Services.AddLogging();
}
}
然后,在 Azure 函数中,我必须通过 aILoggerFactory
而不是 aILogger
并从以下位置获取ILogger
实例loggerFactory
:
public class Functions
{
private HttpClient _httpClient;
private IAppSettings _appSettings;
private ILogger _log;
public Functions(HttpClient httpClient, IAppSettings appSettings, ILoggerFactory loggerFactory)
{
_log = loggerFactory.CreateLogger<Functions>();
}
[FunctionName("Token")]
public async Task<IActionResult> Token(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Token")]
HttpRequest httpRequest)
{
// No need to keep getting the ILogger from the Run method anymore :)
}
}
推荐阅读
- javascript - 使用 TypeScript 泛型定义 Factory 方法的返回类型
- sqlite - SQlite 查询选择字符串日期今天或小于
- c# - 动态显示文本然后退出 void
- reactjs - 使用 SVG 作为 React 组件的 SyntaxError
- jquery - 表格分页 + 表格样式 - 如何在最后显示的行上获得圆角边缘
- php - 使用 prepare 语句在数据库中搜索数据
- r - R更正不一致的数据记录
- python - 如何从参数调用 python 对象
- javascript - 在 Firebase 函数中正确链接函数
- javascript - 滚动不连贯时隐藏元素