.NET 中的全局与单例

2023-11-24

我这里有一个很常见的情况。多年来,我一直没有发现我所做的事情是否符合行业标准。考虑一个连接到数据库的应用程序,但连接字符串不是存储在某些文件/设置中,而是作为命令行参数传递在启动时或在应用程序启动时浏览数据库。

那么有必要将该连接字符串保存在应用程序范围内的某个位置。我见过的最常见的方法是使用模块或全局类,使用 get/set 方法来保存连接字符串。我会做的另一种方法是使用 Singleton。 无论哪种选择,我的 DAL 都可以在需要时通过 GetConnectionString 方法访问连接字符串。

有更好的方法吗?

Update:我没有配置文件,即使有,我也需要在应用程序实例的生命周期内读取一次连接字符串。你能详细说明一下“将它注入到任何类中”部分吗


在一般的全局状态下,无论是全局类还是单例,都应该尽可能避免。

理想的解决方案是让您的应用程序从配置中加载连接字符串并inject将其放入任何需要它的类中。根据您的应用程序的大小,IoC类似容器Unity or 温莎城堡可以提供帮助,但肯定不是解决方案的必需部分。

如果这不是一个选择,并且您被迫维护全局状态(由于现有的代码库或其他原因),我不知道您建议的两种方法之间存在巨大差异。

Update:只是为了澄清一下,暂时忘记有关 IoC 容器的所有内容,“注入”只是“作为参数传递”的一种奇特方式(或者传递给类的构造函数,或者通过属性,或者其他方式)。

数据访问类不必要求连接字符串(来自某种全局或单例),而是通过构造函数或属性传入。

更新#2:我认为对于这种方法的含义仍然存在一些误解。

它基本上取决于您的数据访问类是否如下所示:

public class DataAccessClass
{
    public DataAccessClass()
    {
        _connString = SomeStaticThing.GetConnectionString();
    }
}

or

public class DataAccessClass
{
    public DataAccessClass(string connString)
    {
        _connString = connString;
    }
}

These articles(事实上​​,该博客中的许多文章)详细说明了后者比前者更好的许多原因(尤其是因为前者几乎不可能进行单元测试)。

Yes, at 某个地方首先必须有一些静态人员负责获取连接字符串,但关键是您对静态方法的依赖仅限于该一个点(这可能是该过程中的 Main 方法)引导您的应用程序),而不是散布在整个代码库中。

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

.NET 中的全局与单例 的相关文章

  • 阻止 Outlook 将 HTML 转换为 RTF

    我正在为 Outlook 2007 编写一个加载项 一切正常 除了当我以 HTML 格式发送电子邮件时 Outlook 将其转换为 RTF 因此 如果收件人在例如中打开它 Thunderbird 他收到的是一条看起来很奇怪的短信 而不是我发
  • C# 可以扩展数组吗?

    我习惯向 IEnumerable 等外部类添加方法 但是我们可以在 C 中扩展数组吗 我计划向数组添加一个方法 将其转换为 IEnumerable 即使它是多维的 不相关如何在 C 中扩展数组 https stackoverflow com
  • 如何获取我的应用程序已创建的应用程序域的列表?

    我有一个服务应用程序 它在长时间运行的任务的使用过程中创建AppDomain 我一直通过将它们存储在具有唯一 ID 的哈希表中来跟踪它们 任务完成后 服务应用程序会卸载分配给该任务的 AppDomain 然后将其从 appdomain 哈希
  • COM 互操作注册

    我有一个正在暴露的 NET 程序集COM http en wikipedia org wiki Component Object Model 该程序集有两个公共接口和一个公共类 当我构建程序集时 我收到此警告 AssemblyName dl
  • 在 Windows 窗体应用程序 (.net) 中单击图像的 X/Y 坐标

    有没有办法知道在 FORMS 应用程序中单击了哪些 x y 坐标 看看鼠标事件参数 http msdn microsoft com en us library system windows input mouseeventargs memb
  • 使用 ITextsharp 将 Html 导出为 PDF

    我已经尝试了下面的代码 我也遇到了错误 我正在使用最新的 DLL String strSelectUserListBuilder h1 My First Heading h1 p My first paragraph p String ht
  • 改变方法中的结构

    如何更改外部方法中的结构 public void ChangeStruct MyStruct myStruct myStruct field1 10 return 当我在该方法之后将结构传递给 ChangeStruct 方法时 我希望更改
  • 去除字符串的最佳方法是什么?

    我需要具有最佳性能的想法来删除 过滤字符串 I have string Input view 512 3 159 删除 view 和 的最佳性能方法是什么 和引号 我可以做这个 Input Input Replace view Replac
  • Spring.NET 和构造函数拦截器

    我正在尝试在构造时对对象进行一些 AOP 并找到了 IConstructorInterceptor 这对于我想要的东西来说是完美的 但它似乎不起作用 http jira springframework org browse SPRNET 2
  • 正则表达式不等于字符串

    我用正则表达式用头撞墙 我正在尝试定义一个表达式 该表达式完全排除此文本 System 不区分大小写 但可以包含 系统 这个词提供的不仅仅是这个 例子 系统 无效 系统 无效 系统 无效 系统 无效 asd 系统 有效 asd 系统 asd
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • C# Julian 日期解析器

    我在电子表格中有一个单元格 它是 Excel 中的日期对象 但当它来自 C1 的 xls 类时 它会变成双精度型 类似于 2009 年 1 月 7 日的 39820 0 我读到这是儒略日期格式 有人可以告诉我如何在 C 中将其解析回 Dat
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 托管 .NET 代码中的“访问冲突写入位置...”

    我收到以下异常 MqSearch exe 中 0x000007FE21AFE593 mscorlib ni dll 处出现未处理的异常 0xC0000005 写入位置 0x00000006609476FD 时出现访问冲突 代码是完全托管的
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • “你好世界!!”在 .NET 4 中生成 3500 个页面错误

    我正在运行 Windows Vista 和 Visual Studio 2010 使用 NET 4 2 GB RAM 和大约 800 MB 可用空间 我创建了一个 Windows 窗体应用程序 但没有向其中添加任何代码 只需在发布模式下编译
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • iOS 7中根据单元格文本计算单元格高度

    有许多解决方案使用 sizeWithFont 或类似的东西 但从 iOS 7 开始 它已被弃用 这是我到目前为止拼凑起来的一些代码 高度发生了变化 但一点也不准确 UITableViewCell tableView UITableView
  • Angular 5 一个域中的多个 Service Worker

    我在同一域的两个应用程序中有两个服务工作者 都是 Angular 5 里面的一个 前端 后端 内的第二个 我正在使用 angular service worker 包来管理服务工作者 当我构建产品版本并部署我的应用程序时 会发生一些奇怪的事
  • sh 中的“${0%/*}”和“${0##*/}”[重复]

    这个问题在这里已经有答案了 这些是brew 命令的摘录 BREW FILE DIRECTORY chdir 0 pwd P export HOMEBREW BREW FILE BREW FILE DIRECTORY 0 What do 0
  • 使用 React Native WebSockets 发送 Cookie

    所以我使用的是本机反应网络套接字但不知道如何在 websocket 中包含 cookie 有什么建议吗 目前还没有自动的方法来做到这一点 WebSocket 构造函数有第三个 未记录的 参数 用于将自定义 HTTP 标头传递给连接请求 We
  • SignalR OnConnected 和 OnDisconnected 未触发

    我的集线器中的 OnConnected 和 OnDisconnected 覆盖无法触发 我遇到了问题 出于复制目的 我有一个非常简单的集线器 public class OnlineHub Hub public void TestMethod
  • 在 C# 中重复一个函数,直到它不再抛出异常

    我有一个调用 SOAP 接口并返回数据数组的类 但是 如果此请求超时 则会引发异常 这很好 但是 我希望我的程序尝试再次进行此调用 如果超时 我希望它继续拨打此电话 直到成功为止 我怎样才能做到这一点 例如 try salesOrdersA
  • 将组合框的 ItemsSource 设置为整数数组?

    将组合框的 ItemsSource 设置为整数数组
  • 使用反向一对一字段将 django 模型序列化为 JSON

    假设我有以下两个 django 1 3 模型 from django db import models class Patient models Model name models CharField Name max length 50
  • 在构造函数内注册事件?

    我一直在研究委托 事件和匿名方法 这样一来 有一点就变得非常清楚了 它不会简化在构造函数中注册任何事件方法或委托函数的过程吗 我的测试表明它是有效的 并且它可以防止您在实例化后必须声明它们 因为对象的构造函数会为您执行此操作 事实上 性能还
  • 如何检查程序是否已安装,如果没有则安装?

    由于完整性检查 我宁愿不使用 WMI 这是我所拥有的不起作用 tempdir Get Location tempdir tempdir tostring reg32 HKLM Software Microsoft Windows Curre
  • 解决元类冲突

    我需要创建一个根据某些条件使用不同基类的类 在一些课程中 我得到了臭名昭著的 TypeError metaclass conflict the metaclass of a derived class must be a non stric
  • 使用 ggplot2 绘制相关矩阵图

    我想创建一个相关矩阵图 即每个变量相对于其他变量绘制在散点图中的图 例如pairs or splom 我想用 ggplot2 来做到这一点 请参阅此处的示例 该链接提到了一些人为在 ggplot2 中执行此操作而编写的一些代码 但是 它已经
  • Java 中的类何时以及如何进行垃圾回收?

    我问了一个关于Java中垃圾收集的问题这个话题 但我得到的答案却给了我另一个问题 有人提到类也可以被垃圾收集器收集 这是真的 如果这是真的 这是如何运作的 当没有任何对象引用 Java 中的类时 它可能会被垃圾回收 在大多数简单的设置中 这
  • ruby 继承与 mixins

    在 Ruby 中 由于您可以包含多个 mixins 但只能扩展一个类 因此看起来 mixins 比继承更受青睐 我的问题 如果您正在编写必须扩展 包含才能有用的代码 为什么要把它变成一个类 或者换句话说 为什么不总是把它做成一个模块呢 我只
  • 将数组排序到索引数组指定的容器中的最有效方法?

    任务举例 data np array 1 2 3 4 5 6 7 8 9 idx np array 2 0 1 1 2 0 1 1 2 预期结果 binned np array 2 6 3 4 7 8 1 5 9 限制条件 应该很快 应该O
  • 如何防止 MFMailComposeViewController 取消时崩溃?

    某处 if MFMailComposeViewController canSendMail MFMailComposeViewController email vc MFMailComposeViewController alloc ini
  • 使用 parsley.js 异步提交表单

    我正在尝试创建一个使用 Parsley js 验证前端并异步提交的表单 该表单称为 contactForm 提交按钮是 sendData 当我在空或无效表单上点击 提交 时 就会出现错误 我希望看到来自无效表单数据的 错误 警报 但它只是继
  • 如何测试另一个安装是否已在进行中?

    假设我正在尝试在 Windows 上自动安装某些内容 并且我想在尝试安装之前尝试测试是否正在进行另一个安装 我无法控制安装程序 必须在自动化框架中执行此操作 有没有更好的方法来做到这一点 一些 win32 api 而不只是测试 msiexe
  • 如何使用 Typescript 的声明与从模块导入的接口合并?

    https www typescriptlang org docs handbook declaration merging html 上面的链接提供了有关声明与接口合并的信息 我希望能够使用具有通用组件的界面来做到这一点 我目前正在使用
  • .NET 中的全局与单例

    我这里有一个很常见的情况 多年来 我一直没有发现我所做的事情是否符合行业标准 考虑一个连接到数据库的应用程序 但连接字符串不是存储在某些文件 设置中 而是作为命令行参数传递在启动时或在应用程序启动时浏览数据库 那么有必要将该连接字符串保存在