I have a ASP.NET MVC 6 (beta-4) app.
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); // ... }
And I have a controller...
public class HomeController : Controller { ILogger _logger; public HomeController(ILogger logger) { _logger = logger; } // ... }
But when I'm not getting the service registered correctly somehow: InvalidOperationException: Unable to resolve service for type 'Microsoft.Framework.Logging.ILogger' while attempting to activate 'HomeController'.
. What am I doing wrong with the registering the logger?
Logging providers store logs, except for the Console provider which displays logs. For example, the Azure Application Insights provider stores logs in Azure Application Insights. Multiple providers can be enabled. The default ASP.NET Core web app templates: Use the Generic Host.
Model binding allows controller actions to work directly with model types (passed in as method arguments), rather than HTTP requests. Mapping between incoming request data and application models is handled by model binders.
I assumed that services.AddLogging();
was doing the right thing and registering ILogger
. After looking at the source (https://github.com/aspnet/Logging/blob/d874c5726e713d3eb34938f85faf7be61aae0f2a/src/Microsoft.Framework.Logging/LoggingServiceCollectionExtensions.cs) I found that it's actually registering ILogger<>
. Changing the signature of ILogger
to ILogger<HomeController>
makes the above example work.
public class HomeController : Controller { ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } // ... }
Thanks to @Steve for setting me on the right track to find this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With