簡體   English   中英

DbContextOptions 是如何被注入的?

[英]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>

我有兩個問題:

  1. 它是如何注入的?

  2. 為什么我們需要public EFCoreContext(DbContextOptions<EFCoreContext> options) : base(options) { } 看起來這段代碼只是告訴 EF 我們將使用EFCoreContext作為 DbContext,但是我們已經在 startup.cs 中注冊了EFCoreContext ,任何類的構造函數采用EFCoreContext都可以工作,不是嗎?

  1. 您可以在任何類或任何控制器上注入 dbcontext,如下所示:

    公共類 YourService{

    私有只讀 EFCoreContext _dbContext; 構造函數(EFCoreContext dbContext)_dbContext=dbContext; }

  2. base 選項用於覆蓋 ef 核心 dbcontext 類的默認行為。 但是你也可以在啟動類上做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM