【发布时间】:2019-09-22 19:50:49
【问题描述】:
我有以下SampleData 类在运行EF Migration 后生成一些用户数据。
namespace App.Models
{
public interface ISampleData
{
void Initialize();
}
public class SampleData: ISampleData
{
private readonly AppDbContext _context;
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public SampleData(
AppDbContext context,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager
)
{
_context = context;
_userManager = userManager;
_roleManager = roleManager;
}
public void Initialize()
{
ApplicationUser user;
IdentityRole myrole = _roleManager.FindByNameAsync("Admin").Result;
if (myrole != null) return;
IdentityResult result = _roleManager.CreateAsync(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() }).Result;
string userId1 = Guid.NewGuid().ToString();
if (result.Succeeded)
{
user = new ApplicationUser
{
Id = userId1.ToString(),
UserName = "erkanererkaner@gmail.com",
Email = "erkanererkaner@gmail.com",
FirstName = "Erkan",
LastName = "Er"
};
result = _userManager.CreateAsync(user, "123456Aa*").Result;
if (result.Succeeded) _userManager.AddToRoleAsync(user, "Admin").Wait();
}
}
}
}
Initialize() 方法是从Startup 文件中调用的,如下所示:
public class Startup
{
private readonly ISampleData _sampleData;
public Startup(IConfiguration configuration, ISampleData sampleData)
{
_sampleData = sampleData;
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//other implementation details
services.AddScoped<ISampleData, SampleData>();
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider services)
{
//other implementation details
_sampleData.Initialize();
}
但是,我收到以下错误:
使用来自 IWebHost 访问器的应用程序服务提供程序 '程序'。 System.InvalidOperationException:无法解析服务 尝试激活时输入“App.Models.ISampleData” '应用程序启动'。在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance(IServiceProvider 提供者)
我看到这与我实现Dependency Injection 的方式有关。但我看不到问题所在。有什么想法吗?
【问题讨论】:
标签: c# entity-framework asp.net-core dependency-injection