【问题标题】:Please explain how my DbContext is being instantiate?请解释我的 DbContext 是如何被实例化的?
【发布时间】:2019-07-08 19:52:38
【问题描述】:

大约 3 年前,我构建了一个 Web API,并使用 Ninject for DI 创建了一个通用存储库。今天我正在审查我的代码以进行一些更改,但我不明白我的 DbContext 是在哪里实例化的。我不记得我没有做什么,我相信这是我在 Generic Repo 上阅读的一堆实现的混合体。

我花了很长时间阅读在线文档,但找不到答案。有人可以向我解释一下,以便我可以正确记录它吗?下面是我的示例通用仓库、应用程序仓库、我的控制器和 Ninject 绑定。我知道在 .net 核心中你可以从启动时注入它,但这是使用 EF6 的 web api 2。

通用回购:

public GenericRepository(DbContext _context, ILogService _log)
{
   this.context = _context;
   entities = context.Set<T>();      
}

实体回购:

public ApplicationRepository(TransactionDbContext context) : base(context)
{

}

控制器:

public ApplicationController(IApplicationRepository _applicationRepository)
{
   this.applicationRepository = _applicationRepository
}

Ninject 绑定: kernel.Bind&lt;IApplicationRepository&gt;().To&lt;ApplicationRepository&gt;();

【问题讨论】:

    标签: c# dependency-injection entity-framework-6 dbcontext


    【解决方案1】:

    默认情况下,Ninject 允许您自动解析具体类型。

    有关更多信息,您可以阅读 Ninject wiki:https://github.com/ninject/ninject/wiki/Dependency-Injection-With-Ninject

    【讨论】:

    • 我知道 Ninject 是做什么的,但我想问 DbContext 是如何实例化的?我的代码中没有任何地方对 DbContext 进行自动解析。
    • 据我了解,GenericRepository 是用 Ninject 实例化的。当 Ninject 尝试解析它时,GenericRepository 构造函数中的所有依赖项也将被解析,即使您之前没有绑定它们。但是,只有具体类型才能在没有绑定的情况下解析。
    • 谢谢你,阿列克谢。这就是让我感到困惑的地方。如果 Ninject 正在解析作为具体类的 DbContext。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2018-11-20
    • 2020-08-27
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多