我有一个使用DI和.NET Core选项模式的自定义工作流组件,包括到支持数据库的连接字符串。我正计划添加EF Core,以对同一数据库进行一些数据访问,并希望使用已经通过$.get(file, { name: "John", time: "2pm" , _:Date.now()}, function (data, status)
设置的连接字符串,但是在内部使用时,我遇到了将连接字符串连接到EF的问题配置DbContext,因为在尝试调用services.AddWorkflowEngine()
时尚未设置连接字符串。
是否有合适的位置设置EF核心,以便可以通过`AddWorkflowEngine()在内部设置连接字符串?
WorkflowEngine.cs
AddDbContext<T>()
Extensions.cs
public class WorkflowEngine<TScheme> where TScheme : WorkflowScheme
{
public WorkflowEngine(IOptions<WorkflowConfigurationOptions<TScheme>> options)
{
this.connectionString = options.ConnectionString;
}
}
答案 0 :(得分:1)
根据@Nkosi的评论,如果我想完成此操作,则我必须将我的DbContext
通用化才能注入IOptions<WorkflowConfigurationOptions<T>>
,这将在此时引入过多的复杂性。
我最终手动调用了委托。
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;
}