4

我有一個ConfigurationDbContext,我正在嘗試使用。它有多個參數,DbContextOptionsConfigurationStoreOptionsASP.NET Core DbContext注入

如何將此DbContext添加到ASP.NET Core中的服務中?

我試圖在我的Startup.cs如下:

ConfigureServices 
.... 
services.AddDbContext<ConfigurationDbContext>(BuildDbContext(connString)); 
.... 


private ConfigurationDbContext BuildDbContext(string connString) 
{ 
    var builder = new DbContextOptionsBuilder<ConfigurationDbContext>(); 
    builder.UseSqlServer(connString); 

    var options = builder.Options; 

    return new ConfigurationDbContext(options, new ConfigurationStoreOptions()); 
} 
+0

你使用mssql服務器 – hasan

+0

是的。但是,要構建dbcontext,我需要傳遞另一個參數。 – blgrnboy

+0

我還添加了示例鏈接 – hasan

回答

3

讓我們來看看AddDbContextimplementation

//TContext is your DbContext actual type 
serviceCollection.TryAdd(new ServiceDescriptor(typeof(TContext), typeof(TContext), contextLifetime)); 

serviceCollection.TryAddSingleton(p => DbContextOptionsFactory<TContext>(p, optionsAction)); 
serviceCollection.AddSingleton<DbContextOptions>(p => p.GetRequiredService<DbContextOptions<TContext>>()); 

代替AddDbContext通話,這是完全合法的手動註冊的DbContext:

services.AddTransient<FooContext>(); 

而且,你可以使用一個工廠方法來傳遞參數(這是回答這個問題):

services.AddTransient<FooContext>(provider => 
{ 
    //resolve another classes from DI 
    var anyOtherClass = provider.GetService<AnyOtherClass>(); 

    //pass any parameters 
    return new FooContext(foo, bar); 
}); 

附:一般來說,您不必註冊DbContextOptionsFactory和默認DbContextOptions來解析DbContext本身。在特定情況下可能是必要的。

相關問題