gpt4 book ai didi

c# - 通过 IOptions 配置 EF Core 上下文

转载 作者:行者123 更新时间:2023-12-04 03:50:12 24 4
gpt4 key购买 nike

我有一个使用 DI 和 .NET Core 选项模式的自定义工作流组件,包括一个到后备数据库的连接字符串。我正计划添加 EF Core 以对同一数据库进行一些数据访问,并想使用我已经通过 services.AddWorkflowEngine() 设置的连接字符串。 ,但是在内部配置 DbContext 时,我遇到了将连接字符串获取到 EF 的问题,因为在尝试调用 AddDbContext<T>() 时尚未设置连接字符串。 .

是否有适当的位置来设置 EF 核心,以便可以通过“AddWorkflowEngine()”在内部设置连接字符串?

WorkflowEngine.cs

public class WorkflowEngine<TScheme> where TScheme : WorkflowScheme
{
public WorkflowEngine(IOptions<WorkflowConfigurationOptions<TScheme>> options)
{
this.connectionString = options.ConnectionString;
}
}

Extensions.cs

public static IServiceCollection AddWorkflowEngine<TScheme>(this IServiceCollection services, 
Action<WorkflowConfigurationOptions<TWorkflowScheme>> optionsAction)
where TScheme : WorkflowScheme
{
service.TryAddScoped<WorkflowEngine<TScheme>>();
services.Configure(optionsAction);
return services;
}

最佳答案

根据@Nkosi 的评论,如果我想完成这个,我将不得不通用化我的 DbContext为了注入(inject) IOptions<WorkflowConfigurationOptions<T>> ,此时会引入太多的复杂性。

我最终手动调用了委托(delegate)。

public static IServiceCollection AddWorkflowEngine<TScheme>(this IServiceCollection services, 
Action<WorkflowConfigurationOptions<TWorkflowScheme>> optionsAction)
where TScheme : WorkflowScheme
{
service.TryAddScoped<WorkflowEngine<TScheme>>();
// manually invoke action
var options = new WorkflowConfigurationOptions<TScheme>();
optionsAction.Invoke(options);
services.AddDbContext<WorkflowDbContext>(dbOptions=>
dbOptions.UseSqlServer(options.ConnectionString);

services.Configure(optionsAction);
return services;
}

关于c# - 通过 IOptions 配置 EF Core 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64543983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com