c# - 是否可以创建基础 EF DbContext 并在许多服务中使用它?
问题描述
我尝试在我的项目中实现微服务架构。我想知道我是否可以为依赖注入创建 1 种方法,以便在许多服务中实现 EntityFrameworkCore,所以我没有 DRY。
所以我在想的是我仍然创建我自己的 DbContext,而不是当我想注册它时,我只是把它放在我的 json 文件中,并services.UseSql()
在我的startup.cs
里面添加类似UseSql
使用文件中的配置的东西.json
。
我想说的是通用DbContext
的。
我有一些例子,但正在使用 MongoDb :
例子
public static void AddMongo(this ContainerBuilder builder)
{
builder.Register(context =>
{
var configuration = context.Resolve<IConfiguration>();
var options = configuration.GetOptions<MongoDbOptions>("mongo");
return options;
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
return new MongoClient(options.ConnectionString);
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
var client = context.Resolve<MongoClient>();
return client.GetDatabase(options.Database);
}).InstancePerLifetimeScope();
builder.RegisterType<MongoDbInitializer>()
.As<IMongoDbInitializer>()
.InstancePerLifetimeScope();
builder.RegisterType<MongoDbSeeder>()
.As<IMongoDbSeeder>()
.InstancePerLifetimeScope();
}
解决方案
如果我正确理解您的问题陈述,您希望多个微服务连接到同一个数据库。正如上面的评论所暗示的,你真的不应该这样做,因为你实际上是通过你的数据层耦合你的微服务——如果你的微服务发展成不兼容的数据层,这可能会很混乱。这将消除架构的许多好处,让您处理痛苦。因此,如果确实是这种情况,您可能需要考虑重新审视您的架构并尝试确定您是否需要一个新的微服务来处理这个公共数据存储并将其提供给其他人。
但实际上,有时您必须在项目之间共享代码,并且有一种官方方法可以做到这一点:将公共代码提取到 nuget 包中,将其托管在您的私有企业存储库中的某个位置(如果您愿意的话)并从您的其他项目中引用它。
推荐阅读
- python - 根据时间戳合并数据框中的行
- python - Python mysql参数和加载数据命令
- react-native - 当 RN 0.61 中的状态发生变化时,如何从主组件重新渲染子组件?
- terraform - 在 terraform V0.12 中连接变量
- jquery - 单击功能上的 Ajax - 不响应按钮
- c# - Xamarin 表单中的 ObservableCollection 问题
- javascript - 从类的方法返回查询结果
- python - pip安装报错:包目录不存在
- arrays - 关于二维字符数组,哪个答案是正确的
- javascript - 如何在使用 FETCH 和 Vanilla Javascript 时解决 CORS(Access-Control-Allow-Origin)和 CORB 问题