【发布时间】:2020-01-16 19:27:45
【问题描述】:
我有一个 .NET Standard 2.0 程序集,我一直将它与我的 MVC 和 Webforms 应用程序一起用于执行一些实体框架的工作。在我简单使用过的所有应用程序中:
ConfigurationManager.ConnectionStrings[""]
但是 .NET Core 不支持这一点,而是坚持我使用 Configuration。
所以我有两个问题:
- 我是否可以在 .NET Standard 中使用与内置平台无关(无论是 Webforms、MVC 还是 .NET Core)来读取连接字符串?
- 如何从 .NET Standard 程序集中确定我是从 .NET Core 还是其他任何东西中调用,以便我可以使用
Configuration或ConfigurationManager?我猜我将不得不到处洒target framework conditionals?
【问题讨论】:
-
@Dmitriy 那篇文章谈到了引入旧的配置管理器。虽然可行,但这似乎是一种代码味道。真的没有 .Net 标准解决方案吗?
-
"196 是的,ConfigurationManager.AppSettings 在引用 NuGet 包 System.Configuration.ConfigurationManager 后在 .NET Core 2.0 中可用。感谢 @JeroenMostert 为我提供了解决方案。"够你吃吗?
-
我的代码在 .Net STANDARD 库中,可以从 .Net Core 和 MVC、Webforms 访问。所以添加 ConfigurationManager 不是这里的问题。当 .Net Core 和 MVC/Webforms 都访问 STANDARD 库时,这是一种不可知论的方式。
-
不可知的方法很简单:不要这样做,并坚持你的客户明确地将连接字符串传递给需要它们的类(即使用依赖注入)。这是 .NET Core 选择的路径,而不是传递全局变量,并且是与两者兼容的方法。假设应用程序将使用任何一种特定方式,无论平台如何,都是不正确的。移植的 .NET Core 应用程序可能会选择坚持使用
ConfigurationManager以减少必须更改的代码量,或者它们可能不会 - 您无法在运行时可靠地检测到这一点。
标签: c# asp.net .net asp.net-mvc asp.net-core