我正在将以下有效的WebHost.CreateDefaultBuilder
方法改编为一种基于Host.CreateDefaultBuilder
的方法,以便可以使用UseWindowsService
extension method。
// WORKING
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
...
})
.UseStartup<Startup>();
}
当我尝试适应这个问题时...
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureLogging((hostingContext, logging) =>
{ // tried here
...
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureLogging((hostingContext, logging) =>
{ // tried here too
...
});
.UseStartup<Startup>();
});
我收到以下错误信息...
无法解析类型服务 尝试执行'Microsoft.Extensions.Logging.ILoggerFactory' 激活“ MyProject.Startup”。
在此处设置日志记录的合适方法是什么?
答案 0 :(得分:1)
只能将以下服务类型注入
IHostBuilder
中 使用通用主机(Startup
)时的构造函数:
- IWebHostEnvironment
- IHostEnvironment
- IConfiguration
虽然链接的public Startup(ILoggerFactory loggerFactory)
{
this._Factory = loggerFactory;
this._Logger = loggerFactory.CreateLogger<Startup>();
}
似乎在允许的服务范围之外注入。
Startup
基于链接的ILoggerFactory
代码,似乎未使用该记录器,并且注释掉了对该记录器的一个引用,因为基于使用该记录器的上下文,它是不需要的。 / p>
我建议从Startup
构造函数中删除
@SqlQuery("SELECT DISTINCT organisation.id, organisation.name, organisation.type, " +
" organisation.logo_asset_id,organisation.address, organisation.status, count(s) " +
"FROM organisation " +
" LEFT JOIN channel c on organisation.id = c.organisation_id " +
" LEFT JOIN show s on c.id = s.channel_id " +
" WHERE (<selected_tags>) && s.tags " +
" GROUP BY organisation.id, organisation.name, organisation.type, " +
" organisation.logo_asset_id,organisation.address, organisation.status " +
" ORDER BY count(s) DESC " +
" LIMIT (:limit) OFFSET (:offset);")
List<Organisation> findByTags(@BindIn("selected_tags") List<String> tags, @Bind("limit") int limit, @Bind("offset") int offset);
的注入,作为对框架的较新版本进行重构的一部分。
原始示例代码提供的所有其他内容似乎都遵循文档中建议的格式,并且应该可以正常工作。