0

6 일 전 문제가 발생하여 여전히 해결되지 않았습니다.종속성 주입 문제가있는 ASP.NET 핵심 데이터베이스 구성

나는 DBContext 사용하여 DI 설정 해요 :

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddDbContext<ApplicationContext>(options => 
     options.UseSqlite(Configuration.GetConnectionString("DefaultConnection"))); 

    services.AddMvc(); 

    // Add application services. 
    services.AddTransient<IEmailSender, AuthMessageSender>(); 
    services.AddTransient<ISmsSender, AuthMessageSender>(); 
} 

데이터베이스 파일 경로가 appsettings.json

{ 
    "ConnectionStrings": { 
    "DefaultConnection": "Data Source=xxxx.db" 
    }, 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    } 
} 

에 configurered됩니다 그리고 난 이런 DBContext (https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext를 만드는거야)

public class ApplicationContext : DbContext 
{ 
     public DbSet<Network> xxxx { get; set; } 
     public DbSet<NetworkEntry> xxxx { get; set; } 
     public ApplicationContext(DbContextOptions<ApplicationContext> options) 
     : base(options) 
     { } 
} 

내 컨트롤러 코드 :

public JsonResult Index(ApplicationContext db) 
{ 
    return Json(db.Networks); 
} 

컴파일되어 실행됩니다. 제가 DB를 구성하는 다른 방법을 사용하는 경우는 100 % 문제는 무료로 작동합니다

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
{ 
    optionsBuilder.UseSqlite("Filename=./blog.db"); 
} 

문제 나는 데 :

System.InvalidOperationException: Could not create a model binder for model object of type 'xxx.Data.ApplicationContext'. 
    at Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory.CreateBinder(ModelBinderFactoryContext context) 
    at Microsoft.AspNetCore.Mvc.Internal.DefaultControllerArgumentBinder.<BindModelAsync>d__8.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Mvc.Internal.DefaultControllerArgumentBinder.<BindArgumentsCoreAsync>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResourceFilter>d__22.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context) 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__20.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.<Invoke>d__5.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext() 

모든 단서를?

+0

이 'ApplicationContext'를 MVC 모델에 주입하고 있습니까? MVC 모델은 모든 종속성을 제거해야합니다. MVC 모델 == 데이터. – Steven

+0

아니요, 내 ApplicationContext는 내 이해를 기반으로하는 MVC 모델에 삽입되지 않습니다. 내 모델은'System.ComponentModel.DataAnnotations; 인 1 의존성을 가지고 있습니다. 그들은 데이터를 위해 문자열을 사용하고 Key (ID)를 위해 int를 사용합니다 – Elitenudel

+0

이것을 해결 했습니까? 나는 똑같은 데있다. –

답변

0

방금 ​​비슷한 문제가 해결되었습니다. 나를위한 문제는 내가 의존성 주입을 오해했다는 것이 었습니다. 컨텍스트는 Controller 메서드로 전달되지 않고 Controller의 생성자에 전달됩니다.

public class NetworksController : Controller 
{ 
    private readonly ChoirAdminContext db; 

    public NetworksController(ApplicationContext context) 
    { 
     db = context; 
    } 

    public JsonResult Index() 
    { 
     return Json(db.Networks); 
    } 
} 
관련 문제