service.AddScoped() 与 service.AddDbContext()

2023-11-23

假设我想实现不同的 DbContext(MySql、MsSql),但让应用程序完全不知道它。

因此,使用“AddScoped”(或任何其他)方法,我可以注册如下内容:

<AppDbContextContract, AppDbContextMySql>
<AppDbContextContract, AppDbContextMsSql>

或者甚至将它们隐藏在工厂后面。

但是使用 AddDbContext() 我什至看不到一种明显的方法来放置我需要的实现而不是抽象的 AppDbContextContract。

除了提供在基本应用程序中添加数据库上下文的简单方法之外,AddDbContext() 方法还有什么用处?我应该更喜欢“通用”DI 方法而不是它吗?


.AddDbContext还允许您同时配置它。配置不能与抽象类型一起使用,因为你必须传递一个IDbContextOptionsBuilder<T>进入你的 DbContext,其中T是你的具体实现。

但是,如果您想注入抽象类,则可以一起使用两者。

services.AddDbContext<AppDbContextMySql>( /* configure it */);
services.AddDbContext<AppDbContextSqlServer>( /* configure it */);

services.AddScoped<AppDbContextContract>(p => p.GetRequiredService<AppDbContextMySql>());
services.AddScoped<AppDbContextContract>(p => p.GetRequiredService<AppDbContextSqlServer>());

不使用.AddDbContext你需要写

var dbOptionsA = new DbContextOptionsBuilder<AppDbContextMySql>();
dbOptionsA.UseMySql(...);
services.AddSingleton(dbOptionsA);
var dbOptionsB = new DbContextOptionsBuilder<AppDbContextSqlServer>();
dbOptionsB.UseSqlServer(...);
services.AddSingleton(dbOptionsB);

services.AddScoped<AppDbContextContract,AppDbContextMySql>();
services.AddScoped<AppDbContextContract,AppDbContextSqlServer>();

不太漂亮,是吗?

但如果配置是从外部进行的,那么是的。你只能拥有一个AppDbContextContract,它接受一个IDbContextOptions<AppDbContextContract>并在库中配置它。您仍然需要注册IDbContextOptions<AppDbContextContract>在某处启动期间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

service.AddScoped() 与 service.AddDbContext() 的相关文章

  • 如何将 ASP.NET 5 从 Beta6 升级到 Beta7

    ASP NET 5 vNext 从 Beta 6 升级到 Beta 7 的备忘单是什么 先决条件 从 Beta 6 开始 请参阅之前的注释 https stackoverflow com questions 31745539 how to
  • 开发时在 ASP.NET Core 2.1 中使用 SSL 证书

    在 ASP NET Core 2 1 I 应用程序 appSettings 文件上 我有以下内容 Kestrel Certificates Default Path localhost pfx Password 1234 我使用 dotne
  • 在 MVC 控制器内打开 websocket 通道

    有没有人有在 MVC 控制器内打开 websocket 连接的良好经验 技术栈 ASPNET Core 1 0 RC1 MVC dnx46 System Net WebSockets 为什么使用 MVC 而不是中间件 为了整体一致性 路由
  • 如何使用 Swashbuckle.AspNetCore v5.0.0-rc2 记录 API 密钥身份验证

    我正在将具有使用 Swashbuckle 生成的 Swagger 文档的 Web API 从 NET Framework 迁移到 ASP NET Core 在新的 AspNetCore 版本中 我使用 Swashbuckle AspNetC
  • 指定的CGI应用程序遇到错误,服务器终止了进程

    我在 azure 上托管一个 asp net 5 应用程序 代码是为 beta8 编译的 该应用程序在本地环境以及当我在 azure 网站上发布代码时运行良好 我收到一个常见错误 指定的 CGI 应用程序遇到错误 服务器终止了该进程 我能够
  • 如何使用 blazor 前端 http 请求附加令牌

    我使用 blazor 作为前端 api 已完成 JWT 配置 前端可以创建用户帐户并登录API 但现在我的前端httpclient没有设置JWT令牌 所以如果我在Api控制器中设置 授权 前端将无法访问它 api程序代码如下 builder
  • 如何在 ASP.NET Core Razor Pages 中为单页应用程序创建包罗万象的路由?

    对于单页应用程序 我们希望能够将所有未处理的请求路由到索引 以便处理路由客户端 以前 我们将使用 MapRoute 添加路线 详细信息请参见这个答案 https stackoverflow com questions 42414397 as
  • ASP.Net Core 的自定义不记名令牌授权

    这是自定义不记名令牌授权机制的可接受的实现吗 授权属性 public class AuthorizeAttribute TypeFilterAttribute public AuthorizeAttribute base typeof Au
  • appsettings.json 是否受 IIS 保护?

    在旧版 ASP NET 应用程序中 config files cannot通过导航到 URL 即可下载 但新的约定是使用appsettings json 现在 如果我有一个名为的 ASP NET Core 网站contoso com它由 I
  • 使用 ReactJS SPA 在 .net Core 中进行身份验证

    我尝试向 net Core 2 1 应用程序添加身份验证 从头开始 我们可以使用 VS 模板通过 React 创建新的 Web 应用程序 在这个模板中我们可以看到 app UseSpa spa gt spa Options SourcePa
  • .net core 1.1 中嵌入的 power bi

    目前 我正在尝试在 Visual Studio 2017 中为我的 net core 1 1 项目导入 powerbi 包 但是 我收到以下错误 Install Package Package Microsoft PowerBI Core
  • Docker 多个相同端口问题

    我目前正在解决方案中开发两个相互关联的 ASP NET Core WebAPI 服务 Service1 和 Service2 两者都有 docker 文件并暴露端口 80 Service1是一个独立的服务 需要从Service2调用 我已经
  • 使用“dnupublish”排除发布项目上的文件夹

    如何使用 dnupublish 命令从 wwwroot 中排除文件夹 示例 在我的项目中存在许多文件夹 我需要排除wwwroot lib and wwwroot 源 我正在使用 clr 1 0 0 beta7 12302 The wwwro
  • .Net Core 3.0 JsonSerializer填充现有对象

    我正在准备从 ASP NET Core 2 2 迁移到 3 0 由于我不使用更高级的 JSON 功能 但可能如下所述 并且 3 0 现在附带了一个内置的 JSON 命名空间 类 System Text Json 我决定看看是否可以放弃之前的
  • IOptions 不包含 ASP.NET 5 Beta 8 中的定义“选项”

    Problem 我在将 beta7 应用程序升级到 beta8 时遇到问题 我最初有超过 50 个错误 但现在基本上只剩下两个我无法解决的持续错误 一种是带有选项 选项缺失错误 这是错误 错误 CS1061 IOptions 不包含 Opt
  • 如何使用itext7缩放固定矩形内的文本?

    我正在尝试使用 c 中的 itext7 制作一个 pdf 文档 该文档应该具有包含不同文本的固定矩形 这些文本应该在 不可见 矩形的边界内缩放 我试图寻找是否有自动缩放功能 但到目前为止只发现表单域的自动缩放功能 由于 pdf 将用于绘制文
  • ASP.NET Core 2.0禁用自动质询

    将我的 ASP NET Core 项目升级到 2 0 后 尝试访问受保护端点不再返回 401 而是重定向到 不存在的 端点以尝试让用户进行身份验证 应用程序所需的行为只是返回 401 以前我会设置AutomaticChallenge fal
  • 使用内存数据库和急切加载函数对 EF Core 进行单元测试

    我正在为我的 Web API 编写单元测试 除非删除包含 从方法中热切加载 否则无法让测试通过 我正在使用内存数据库来提供dbcontext并且无法弄清楚为什么它不返回任何数据 预先感谢任何帮助或建设性批评 这是我正在尝试测试的方法 Not
  • Directory.GetCurrentDirectory() 不返回正确的目录[重复]

    这个问题在这里已经有答案了 在我的 ASP NET Core 2 2 MVC 服务器中 我想添加一个文件夹来存储静态文件 我找到了以下代码来执行该操作 app UseStaticFiles new StaticFileOptions Fil
  • App Insights 升级到 2.5 后,Azure 应用服务将无法启动

    我有一个存储库 它使用应用程序洞察来记录有关在 ASP NET 中运行的服务的信息 我们有一些 ASP NET Core 2 0 站点以及一些完整框架的 asp net 4 应用程序 随着应用程序洞察 2 5 的发布 我们在核心站点中获得了

随机推荐