[英]How does DbContextOptions get injected?
我在下面看到了很多这样的代码:
public class EFCoreContext : DbContext
{
public EFCoreContext(DbContextOptions<EFCoreContext> options) : base(options) { }
public DbSet<Book> Books { get; set; }
...
}
所以我认为DbContextOptions<EFCoreContext> options
是通过 DI 注入的:
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<EFCoreContext>( // register EFCoreContext so it can be injected
options => options.UseSqlServer(connection) // tell EF that you're using an SQL Server database by using the UseSqlServer method
);
}
但是我查看了 AddDbContext 的源代码( https://github.com/dotnet/efcore/blob/main/src/EFCore/Extensions/EntityFrameworkServiceCollectionExtensions.cs ),我找不到任何与注入DbContextOptions<EFCoreContext>
相关的代码DbContextOptions<EFCoreContext>
。
我有两个问题:
它是如何注入的?
为什么我们需要public EFCoreContext(DbContextOptions<EFCoreContext> options) : base(options) { }
? 看起来这段代码只是告诉 EF 我们将使用EFCoreContext
作为 DbContext,但是我们已经在 startup.cs 中注册了EFCoreContext
,任何类的构造函数采用EFCoreContext
都可以工作,不是吗?
您可以在任何类或任何控制器上注入 dbcontext,如下所示:
公共类 YourService{
私有只读 EFCoreContext _dbContext; 构造函数(EFCoreContext dbContext)_dbContext=dbContext; }
base 选项用于覆盖 ef 核心 dbcontext 类的默认行为。 但是你也可以在启动类上做同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.