'Unable to create ILogger<T> when I use UserManager
I have the following very simple console app for creating Users manually via CLI.
Program.cs:
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
var services = new ServiceCollection();
services.AddStorageConfiguration(configuration);
services.AddSingleton<CreateUserService>();
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.BuildServiceProvider().GetService<CreateUserService>().Run();
CreateUserService.cs:
namespace CreateUserApp;
public class CreateUserService
{
private readonly UserManager<User> _userManager;
public CreateUserService(UserManager<User> userManager)
{
_userManager = userManager;
}
public void Run()
{
Console.WriteLine("Enter Username:");
var username = Console.ReadLine();
Console.WriteLine("Enter Email:");
var email = Console.ReadLine();
Console.WriteLine("Enter Password:");
var password = Console.ReadLine();
var user = new User
{
Email = email,
UserName = username,
};`enter code here`
var res = _userManager.CreateAsync(user, password).GetAwaiter().GetResult();
if (res.Succeeded)
{
Console.WriteLine("User successfully created. ");
}
else
{
Console.WriteLine("Can not create user. Errors:");
foreach (var resError in res.Errors)
{
Console.WriteLine($"{resError.Code}: {resError.Description}");
}
}
}
}
But when I run it, I see the following exception message:
Unhandled exception. System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger`1[Microsoft.AspNetCore.Identity.UserManager`1[Domains.Us
er]]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[Domains.User]'.
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, B
oolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain ca
llSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, B
oolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain ca
llSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
at Program.<Main>$(String[] args) in C:\Projects\MyFamilyTree\MyFamilyTree\CreateUserApp\Program.cs:line 20
services.AddStorageConfiguration(configuration); is just my extension:
public static IServiceCollection AddStorageConfiguration(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseNpgsql(configuration.GetConnectionString("DatabaseConnectionString"));
});
return services;
}
I use .NET 6 So, any ideas what is wrong?
Solution 1:[1]
First: install ILogger implementation. $ dotnet add package Microsoft.Extensions.Logging
Second: install console logger provider. $ dotnet add package Microsoft.Extensions.Logging.Console
And then configure all off this:
services.AddLogging(configure => configure.AddConsole());
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Aleksej_Shherbak |
