我已经Main像这样配置了控制台应用程序
var services = new ServiceCollection()
.AddLogging(logging => logging.AddConsole())
.BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)
然后我尝试在另一个类中使用它
private readonly ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
public void MyFunc()
{
_logger.Log(LogLevel.Error, "My Message");
}
Run Code Online (Sandbox Code Playgroud)
System.InvalidOperationException:'无法解析类型为'Microsoft.Extensions.Logging.ILogger的服务'
根据以下Yaakov的评论和Github的评论进行编辑,我能够通过此操作正确解决它
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
}
Run Code Online (Sandbox Code Playgroud)
我本来希望在初始时使用它,BuildServiceProvider但看起来每次要使用记录器(或创建自己的ILogger)时都必须重复此操作。
我会将数据播种到 AspNet 身份表中。该表已成功创建,但在尝试播种数据时出现错误。
System.InvalidOperationException:尝试激活“Microsoft.AspNetCore.Identity.UserManager”时,“无法解析类型为“Microsoft.Extensions.Logging.ILogger1[Microsoft.AspNetCore.Identity.UserManager1[Microsoft.AspNetCore.Identity.IdentityUser]]”的服务`1[Microsoft.AspNetCore.Identity.IdentityUser]
public static void EnsureSeedData(string connectionString)
{
var services = new ServiceCollection();
services.AddDbContext<IdentityDbContext>(options =>
options.UseSqlServer(connectionString));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityDbContext>()
.AddDefaultTokenProviders();
using (var serviceProvider = services.BuildServiceProvider())
{
using (var scope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = scope.ServiceProvider.GetService<IdentityDbContext>();
context.Database.Migrate();
var userMgr = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var alice = userMgr.FindByNameAsync("alice").Result;
if (alice == null)
{
alice = new ApplicationUser
{
UserName = "alice",
Email = "AliceSmith@email.com",
EmailConfirmed = true
};
var result = userMgr.CreateAsync(alice, "My long 123$ password").Result;
if (!result.Succeeded)
{
throw new …Run Code Online (Sandbox Code Playgroud)