Dependency injection 如何从.NET中的AKKA.NET参与者访问数据库?

Dependency injection 如何从.NET中的AKKA.NET参与者访问数据库?,dependency-injection,akka,.net-core,akka.net,Dependency Injection,Akka,.net Core,Akka.net,我正在使用AKKA.NET在.NET核心控制台应用程序(frameworknet46)中构建异步处理逻辑 到目前为止,我已经使用内置依赖项注入来提供对IDbConnection对象(或EF的ApplicationDbContext)的访问。这使得单元测试变得容易 在处理参与者内部的数据库访问时,我非常怀疑什么是最佳实践 一种简单的方法是使用以下代码块编写好的旧代码: using(var db = new ApplicationDbContext()) { ...query, modify

我正在使用AKKA.NET在.NET核心控制台应用程序(frameworknet46)中构建异步处理逻辑

到目前为止,我已经使用内置依赖项注入来提供对IDbConnection对象(或EF的ApplicationDbContext)的访问。这使得单元测试变得容易

在处理参与者内部的数据库访问时,我非常怀疑什么是最佳实践

一种简单的方法是使用以下代码块编写好的旧代码:

using(var db = new ApplicationDbContext()) {
   ...query, modify and save objects using the db object
}
完全忽略DI容器


我好奇地想知道,经验丰富的AKKA开发人员认为这种情况下的最佳实践是什么?

难道你不把它当作你的演员所拥有的其他依赖吗?也就是说,仍然使用IDatabaseThing作为构造函数参数?(不确定这是否适用于EF,因为我没有使用过它)(我也倾向于不使用DI容器)还阅读了这篇博文中的第2项-建议不要使用DI容器,我同意这一点。问题是,参与者通常会长期存在,而数据库连接(或EF dbcontext对象)应该在使用后处理(并返回到我假定的底层连接池)。因此,在构造过程中无法将数据库连接移交给参与者。我想我必须创建一个工厂委托或类,并在构造函数中传递该对象。然后每当我需要actor receive方法中的具体连接时,我都可以请求工厂创建一个连接对象。是的,这正是我的想法你需要做的NK:)-参与者将负责管理它需要的每个连接的生存期,IDatabaseThing将允许你创建和销毁这些连接。