在VS 2015中使用新的ASP.NET 5来处理一些代码。使代码正常工作,并在添加了一些额外的代码以适应身份组件的异步之后:
无法解析“ClientExpress.Startup”类型上方法“配置”的参数“种子器”的'ClientExpress.Models.ClientExpressContextSeedData‘类型服务。
在第二个项目中,我使用了相同的Startup.cs流,包括上下文种子类、异步组件,并且没有出现任何问题。
除了类的名称之外,在工作流中看不到任何不同的东西。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var connectionString = Configuration["Data:EAutoConnectionString"];
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ClientExpressContext>()
.AddDbContext<ContactContext>(options =>
options.UseSqlServer(connectionString));
services.AddScoped<IContactRepository, ContactRepository>();
services.AddTransient<ClientExpressContextSeedData>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public async void Configure(IApplicationBuilder app, ClientExpressContextSeedData seeder)
{
app.UseStaticFiles();
//app.UseIdentity();
app.UseMvc(config =>
{
config.MapRoute(
name: "Default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "App", action = "Index" }
);
});
await seeder.EnsureSeedDataAsync();
}ClientExpressContextSeedData.cs
public class ClientExpressContextSeedData
{
private ClientExpressContext _context;
private UserManager<ClientExpressUser> _userManager;
public ClientExpressContextSeedData(ClientExpressContext context, UserManager<ClientExpressUser> userManager)
{
_context = context;
_userManager = userManager;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public async Task EnsureSeedDataAsync()
{
if(await _userManager.FindByEmailAsync("abc@testcompany.com") == null)
{
//Add Initial Users
var newUser = new ClientExpressUser()
{
UserName = "newuser",
Email = "abc@testcompany.com"
};
await _userManager.CreateAsync(newUser, "Pa$$w0rd");
}
}
}如果我将ClienExpressContextSeedData播种机从配置方法中删除,那么它就会运行,但当然不会产生种子。
我发现的信息存在这个问题,当存储库被意外地与服务交互使用时,会出现很多问题,但在这种情况下并非如此。我不知道什么是不同的,或者注射是错误的。
发布于 2016-02-06 22:40:36
好的,在深入研究这个问题并处理其他依赖项之后,虽然错误消息指向了种子类,但事实证明真正的问题是ef 7迁移。我已经构建了正确的迁移,但是最近添加的迁移并没有正确地应用到数据库中。被种子程序使用的类的两个属性是在最近的迁移中设置的,但是没有被应用(但是没有抛出错误)。
删除迁移,删除工作数据库,然后重新添加迁移以使数据库当前。新的迁移并没有损坏,而且数据库构建得很好。
发布于 2016-02-06 13:39:07
ClientExpressContextSeedData依赖于UserManager<ClientExpressUser>
UserManager<ClientExpressUser>不是在ConfigureServices方法中设置的,因此ClientExpressContextSeedData无法解析。
添加如下内容:
services.AddIdentity<ClientExpressUser, IdentityRole>()https://stackoverflow.com/questions/35233268
复制相似问题