0

6日前に問題に遭遇しましたが、まだ解決できません。依存関係注入の問題を伴うASP.NETコアデータベースの設定

私はDIを使用してDBContextを設定してい:

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); 
    } 
} 
関連する問題