【问题标题】:What should be passed for a connection?连接应该传递什么?
【发布时间】:2017-01-13 05:19:07
【问题描述】:
我正在开发一个将与数据源交互的 .NET Core 库。似乎最好使用options pattern 来设置库,但我不确定我应该期待什么类型:
- (连接)字符串 - 然后我需要弄清楚我要连接到什么。
- DbContext - 似乎特定于实体框架。
- DbConnection - 如果它在其他地方共享,我无法随意打开和关闭。
- ??? - 最佳选择。
最好的选择是什么?我正在使用内置 DI。
【问题讨论】:
标签:
dependency-injection
.net-core
【解决方案1】:
一开始有点theory:
配置 API 提供了一种基于名称-值对列表配置应用程序的方法,该列表可在运行时从多个来源读取。
每个配置值都映射到一个字符串键。
内置绑定支持可将设置反序列化为自定义 POCO 对象(具有属性的简单 .NET 类)。
选项模式使用自定义选项类来表示一组相关设置。
选项类必须是具有公共无参数构造函数的非抽象类。
现在让我们回到你的案例:
没关系,您使用什么类来存储设置,它是名称-值对的 list 的包装器,从设置源之一检索。此外,可以通过键从设置存储中简单地读取特定值。
Option 类是用于对相关设置进行分组的容器,其中类属性按名称与 Key 相关。而且这个类必须是POCO => 有公共属性、公共无参构造函数等。像DbContext、DbConnection这样的类不是POCO类。
-
任何连接字符串 (CS) 都可以存储为字符串。您可以使用https://www.connectionstrings.com 进行检查。所以 CS 可以在你的设置源中表示为一个键值对。另一方面,CS 也是一组键值对(参数名称 = 值),可以拆分为单独的部分。例如,简单的 CS 到 SQL Server 有下一个模板:
Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword;
可以表示/存储在类中,如下所示:
public class ConnectionString
{
public string Server {get;set;}
public string Database {get;set;}
...
}