skip to Main Content

I have my own DbContext:

public class DreamsContext : DbContext
{
    public DbSet<UserAccount> UserAccounts { get; set; }
    public DbSet<DreamPublication> DreamPublications { get; set; }

    public DreamsContext(DbContextOptions<DreamsContext> options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserAccount>().ToTable("dreams_user");
        modelBuilder.Entity<DreamPublication>().ToTable("dream_publications");

        base.OnModelCreating(modelBuilder);
    }
}

where UserAccount and DreamPublication contain just a few fields with get and set.

In my startup I add this for the DbContext:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<Models.DreamsContext>(options =>
                options.UseSqlServer("server = SCAT\SQLEXPRESS; database = dreams_web; Trusted_Connection=True ; MultipleActiveResultSets = true"));
}

And then I’m trying to inject my DbContext into a controller using DI:

private readonly Models.DreamsContext _context;

public SignUpController (Models.DreamsContext dbContext)
{
    _context = dbContext;
}

But when I am trying to do something with this context I get an exception:

Unable to resolve service for type ‘(My DbContext)’ while attempting to activate ‘(My controller)’

And I don’t know what to do, on MSDN they do just this and everything works

Update. This is what written in console

System.InvalidOperationException: Unable to resolve service for type 'DreamWeb.Models.DreamsContext' while attempting to activate 'DreamWeb.Controllers.SignUpController'.
         at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
         at lambda_method25(Closure , IServiceProvider , Object[] )
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass7_0.<CreateActivator>b__0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

2

Answers


  1. Chosen as BEST ANSWER

    The main problem was I was trying to configure services in Startup class, while I am using asp.net CORE so the main magic is going in program.cs I moved everything to program.cs and everything is working fine. It cost me a few days, even it's such a little mistake

    https://learn.microsoft.com/en-us/dotnet/architecture/porting-existing-aspnet-apps/app-startup-differences

    According to this, startup should continue to work in asp.net core, but i had problems with it


  2. I had the same problem I solved by adding the connection to the db in the main file of the Project Program.cs , add it after the line var builder :

    // db connection 
    builder.Services.AddDbContext<Dbcontexclass>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnectionString"));
    

    Add in appsettings.json :

     "ConnectionStrings": {
        "DefaultConnectionString": "SERVER=server;DATABASE=database;User ID=user;PASSWORD=password;"
      }
    

    fill the Connection String , Dbcontexclass , and it should work, I leave you the docs link ( https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-7.0&tabs=visual-studio )

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search