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