0

我在现有的ASP.Net核心2.0应用程序中集成了基于ASP.Net Core 2.0的新创建的身份验证项目后也遇到了问题。无法在尝试激活时解析“MyApp.ApplicationDbContext”类型的服务

经过一番调整,那么成功的构建,在browsser我得到了一个错误:

An unhandled exception occurred while processing the request.

InvalidOperationException: Unable to resolve service for type 'SpaServices.ApplicationDbContext' while attempting to activate

认证必须使用一个单独的数据库,该数据库还没有脚手架

我Startup.cs是如下:

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

public IConfigurationRoot Configuration { get; } 

// This method gets called by the runtime. Use this method to add services to the container. 
public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddDbContext<SchoolContext>(options => 
     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

    services.AddIdentity<ApplicationUser, IdentityRole>() 
     .AddEntityFrameworkStores<ApplicationDbContext>() 
     .AddDefaultTokenProviders(); 

    services.AddMvc() 
     .AddRazorPagesOptions(options => 
     { 
      options.Conventions.AuthorizeFolder("/Account/Manage"); 
      options.Conventions.AuthorizePage("/Account/Logout"); 
     }); 

    // Register no-op EmailSender used by account confirmation and password reset during development 
    // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=532713 
    services.AddSingleton<IEmailSender, EmailSender>(); 

} 

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    #region webpack-middleware-registration 
    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseWebpackDevMiddleware(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    // Call UseWebpackDevMiddleware before UseStaticFiles 
    app.UseStaticFiles(); 
    #endregion 

    #region mvc-routing-table 
    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 

     routes.MapSpaFallbackRoute(
      name: "spa-fallback", 
      defaults: new { controller = "Home", action = "Index" }); 
    }); 
    #endregion 
} 

我的构造函数如下:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

    } 
} 

我已经更新了构造明确期望类型的容器知道如何解决:

public ApplicationDbContext(DbContextOptions options) 
    : base(options) 
    { 
    } 

没有成功,有什么想法?

回答

1

您需要在您的ConfigureServices方法如下():

services.AddDbContext<ApplicationDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("[Your Connection String Identifier]"))); 

目前,您只增加了一个“SchoolContext”的DbContext

+0

有时碰巧一个让愚蠢的错误,这是one.Yes你是对的,我添加它,然后重新更新构造函数如上,明确期望容器知道如何解决,然后它的工作。 –

相关问题