DI 在桌面应用程序中有意义吗?

2024-03-13

我即将创建一个桌面应用程序(使用 .NET Windows 窗体)

本质上,我想创建一个 n 层应用程序,但我也希望各层之间松散耦合。但是,我不太确定这对于 Windows 窗体来说是否是一个好方法

现在我只是想知道使用任何 IoC(StructureMap、Ninject、Spring.Net)是否真的是一个明智的选择,我之前曾在 Asp.Net Web 应用程序中使用过它们,但现在让我怀疑的是,与当我浏览选项卡时,Windows 表单我的业务实体将持续存在,与 Web 表单或 MVC 应用程序不同,在 Web 表单或 MVC 应用程序中,需要为执行的每个新请求注入我的业务实体,我的意思是因为Asp.Net页面生命周期 http://msdn.microsoft.com/en-us/library/ms178472.ASPX在哪里执行初始化并控制实例化。

这是一个长期开发项目,它结合了维护跟踪、库存、工作订单和管理报告。我目前正在制定其架构提案。

也许我误解了使用 IoC 的意义,所以请告诉我你认为更好的选择是什么?

任何观点将不胜感激。


在您的情况下使用 DI / IoC 仍然有意义,因为这一切都是为了放弃对依赖项来自何处、由谁管理其生命周期等的控制。

从这个意义上讲,原则Inversion of Control几乎是独立于平台的,它在连接方面可能略有不同ASP.NET and WinForms,但原理是一样的。

因此,在 ASP.NET 中,控制反转通常是realised via Dependency Injection并且主要通过构造函数注入到控制器等中,这并不意味着您必须在 Windows 窗体中遵循相同的模式 - 例如,您可以使 IoC 容器的全局实例可供所有窗体使用,并让它们获得它们的通过类似的东西的依赖关系

var SomeBusinessObject = container.Get<SomeBOType>(); //Ninject style.

在这种情况下,它仍然是 IoC(表单不会直接创建依赖项,它不知道容器是否为它提供了一个全新的实例,或者全局共享的单个静态实例,它不知道什么时候会被破坏等),但严格来说这不是依赖关系注射- 但是,您可以获得 IoC 框架为您管理的复杂依赖关系图的所有好处。

另请记住,您始终可以处理用户切换选项卡的事件,并将其视为一个全新的“请求”,然后丢弃并重新获取您的依赖项,如果由于某种原因这对于如何进行操作很重要该应用程序应该可以工作。

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

DI 在桌面应用程序中有意义吗? 的相关文章

  • 如果单元格以文本字符串开头...公式

    我有一个公式 用于检查单元格是否以文本 A 开头返回 拾取 B 代表收集 和 C 代表预付 但它似乎不能正常工作 A 和 C 均返回预付费 LOOKUP LEFT A1 A B C Pick Up Collect Prepaid 我不知道l
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • 在IOS5中实现SIP功能

    我想构建一个 iPhone 应用程序 它可以选择通过 SIP VoIP 拨打电话 但目前我不知道如何开始 有谁有关于这个主题的一些信息 或者可能有一个我可以用来实现 SIP 功能的演示项目 提前致谢 你前面还有一条漫长而有趣的路 您需要选择
  • Angular2 http.post 被执行两次

    我遇到一个奇怪的问题 Angular2 的 RC1 Http 服务执行 http post 调用两次 我已经调试了我的应用程序 并且我知道这不是点击事件问题 导致核心服务调用的所有调用 public create json Object p
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • angular-cli:Karma-Webpack 因“没有此类文件或目录”而失败

    我从Tour of Heroes使用标准 Angular systemjs 现在我正在使用angular client它在开发 生产模式下运行顺利 但我无法测试任何东西ng test 以下内容会被吐出 不仅适用于test ts但也为了pol
  • PostgreSQL 使用 JPA 和 Hibernate 抛出“列的类型为 jsonb,但表达式的类型为 bytea”

    这是我的实体类 映射到表中postgres 9 4 我正在尝试将元数据存储为jsonb在数据库中输入 Entity Table name room categories TypeDef name jsonb typeClass JsonBi
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre
  • 如何从停止的地方开始播放视频

    我正在使用 VideoView 来播放视频 如果我退出应用程序 在返回应用程序 即在 onResume 中 时 它应该从停止的位置播放视频 要获取当前进度 在 onPause 中检查 long progress mVideoView get
  • Laravel Echo 不监听推送事件

    尝试使用 laravel 和 vuejs 创建一种聊天应用程序 发送消息后 我会从 laravel 触发事件 该事件会使用正确的事件类反映在推送器调试控制台上 但根本不会调用来自 vuejs 的监听回调 created window Ech
  • 尝试访问从资产复制到数据\数据\的数据库中的DatabaseHelper时出现空指针异常

    我有一个数据库助手类 代码如下 这个助手的类任务是将数据库从应用程序附带的资产文件夹复制到我的应用程序的 data data 中 以便我可以使用它 一旦我将数据库放入 data data 我能够 我想添加它并执行 CRUD 操作 并且该数据
  • 如何在 Jetpack Compose 中提供相对大小

    我有一个框布局 我想相对于父框的大小来布局子视图 这可以在 SwiftUI 中使用 Geometry Reader 来实现 如何在 Jetpack Compose 中实现类似的功能 您可以使用BoxWithConstraints代替Box
  • 常用姓名别名/昵称数据库

    我参与了一个 SQL NET 项目 该项目将搜索名称列表 我正在寻找一种方法来返回类似名字的人的一些结果 如果搜索 Tom 结果将包括 Thom Thomas 等 这是文件还是 Web 服务并不重要 设计示例 Table Names has
  • KeyboardAvoidingView“行为”中的高度与位置与填充

    KeyboardAvoidingView 中有一个 行为 属性 例如 import KeyboardAvoidingView from react native
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本
  • 寻求有关标记视频系统上的“相关视频”查询的建议

    好吧 我运行一个小型视频网站 在实际的视频页面上有一条与大多数视频页面 例如 YouTube 类似的 相关视频 目前我所做的就是随机获取其标签之一并查找其他视频相同的标签 毫不奇怪 这不是一个好方法 因为有些标签非常模糊 有些视频被错误标记

随机推荐