【问题标题】:Access connection string in data layer在数据层访问连接字符串
【发布时间】:2018-08-01 16:41:44
【问题描述】:

我目前正在.NET 核心中开发一个 Web API。我的解决方案中有三个项目,参考如下:

Web -> 服务 -> 数据访问

所以 web 层没有直接引用 DataAccess 层。

我的问题是:在这种三层架构中获取连接字符串的正确方法是什么?我已经阅读了,但找不到任何好的解决方案,我可以在第三层访问我的连接字符串,只是因为 web 层没有对第三层的引用。

我遇到了这种方法:

services.Configure<ConnectionConfig>(Configuration.GetSection("ConnectionStrings"));
services.AddScoped<IQueryHelper>(c => new QueryHelper(cn));

如果我只有两层,这很好用,其中 QueryHelper 在服务层中。

但我想访问我的数据访问层中的一个或多个连接字符串。

【问题讨论】:

  • Bryan,我想知道我是否可以要求你在写问题时多加注意?我们热衷于在这里使问题简洁易读,为此,拼写很重要。 “I am”的缩写是“I'm”,它总是有一个撇号(63个帖子要修复)。无需添加“请帮帮我”等形式的恳求(39个帖子修复)。我们这里没有足够的编辑志愿者,所以你以后会记住这一点吗?谢谢。

标签: c# asp.net-web-api asp.net-core


【解决方案1】:

编辑:注入配置可能不是最聪明的想法,您可以阅读here。更好的方法是为 DAL 也可以访问的每个连接字符串配置选项。

services.Configure<MyConnectionInfo>(options => Configuration.GetSection("MyConnectionInfo").Bind(options));

现在只需在您的存储库中注入 IOptions&lt;MyConnection&gt; 并使用这些值。

旧答案:只需将您的配置注入您的数据层类。在您必须向 ioc-container 注册配置之前。

services.AddSingleton(typeof(IConfiguration), Configuration);

现在通过注入IConfiguration 的实例来访问您需要的连接字符串。您也可以配置更多选项,但注入配置也很好。

【讨论】:

  • 根据这个答案:stackoverflow.com/a/43063213/4444267 你不应该那样做。
  • 最好不要混淆 Steven 所说的话:P 他应该最了解。相应地更新了我的答案。
  • 那么我如何访问第三层存储库中的连接字符串? :P
  • 配置一个可以在你的第三层注入的选项类。如果要在多个程序集中访问选项类,则必须在独立程序集中。提供了一个例子。
  • 所以我在放置选项类的地方添加了一个新项目(程序集)。之后,我必须从我的第三层添加对该程序集的引用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2015-12-27
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多