首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET 5依赖项注入服务错误

ASP.NET 5依赖项注入服务错误
EN

Stack Overflow用户
提问于 2016-02-05 20:51:36
回答 2查看 670关注 0票数 0

在VS 2015中使用新的ASP.NET 5来处理一些代码。使代码正常工作,并在添加了一些额外的代码以适应身份组件的异步之后:

无法解析“ClientExpress.Startup”类型上方法“配置”的参数“种子器”的'ClientExpress.Models.ClientExpressContextSeedData‘类型服务。

在第二个项目中,我使用了相同的Startup.cs流,包括上下文种子类、异步组件,并且没有出现任何问题。

除了类的名称之外,在工作流中看不到任何不同的东西。

Startup.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
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播种机从配置方法中删除,那么它就会运行,但当然不会产生种子。

我发现的信息存在这个问题,当存储库被意外地与服务交互使用时,会出现很多问题,但在这种情况下并非如此。我不知道什么是不同的,或者注射是错误的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-06 22:40:36

好的,在深入研究这个问题并处理其他依赖项之后,虽然错误消息指向了种子类,但事实证明真正的问题是ef 7迁移。我已经构建了正确的迁移,但是最近添加的迁移并没有正确地应用到数据库中。被种子程序使用的类的两个属性是在最近的迁移中设置的,但是没有被应用(但是没有抛出错误)。

删除迁移,删除工作数据库,然后重新添加迁移以使数据库当前。新的迁移并没有损坏,而且数据库构建得很好。

票数 0
EN

Stack Overflow用户

发布于 2016-02-06 13:39:07

ClientExpressContextSeedData依赖于UserManager<ClientExpressUser>

UserManager<ClientExpressUser>不是在ConfigureServices方法中设置的,因此ClientExpressContextSeedData无法解析。

添加如下内容:

代码语言:javascript
复制
services.AddIdentity<ClientExpressUser, IdentityRole>()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35233268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档