我有一个ASP.NET MVC 6 (beta-4)应用程序。
public void ConfigureServices(IServiceCollection services)
{
// Logging
services.AddLogging();
// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
{
// Add the console logger.
loggerfactory.AddConsole(minLevel: LogLevel.Warning);
// ...
}我有个控制器..。
public class HomeController :
Controller
{
ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
// ...
}但是当我没有得到正确注册的服务时:InvalidOperationException: Unable to resolve service for type 'Microsoft.Framework.Logging.ILogger' while attempting to activate 'HomeController'.。我登记记录器有什么问题吗?
发布于 2015-05-12 17:27:56
我以为services.AddLogging();做了正确的事情并注册了ILogger。在查看了源代码(https://github.com/aspnet/Logging/blob/d874c5726e713d3eb34938f85faf7be61aae0f2a/src/Microsoft.Framework.Logging/LoggingServiceCollectionExtensions.cs)之后,我发现它实际上是在注册ILogger<>。将ILogger的签名更改为ILogger<HomeController>使上述示例工作。
public class HomeController :
Controller
{
ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
// ...
}感谢史蒂夫让我走上了正确的轨道找到了这个。
发布于 2017-01-09 21:36:47
services.AddLogging();不适合我,所以我将这两条语句添加到ConfigureServices中
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));现在DI容器是愉快的,一切都正常。
发布于 2022-06-17 10:40:32
可以将以下行添加到ConfigureServices()方法中:
services.AddTransient<ILogger>(s => s.GetService<ILogger<Program>>());https://stackoverflow.com/questions/30194919
复制相似问题