依赖注入陷阱

2024-04-25

有人在 www 上有一个链接列表来获取 DI 陷阱的好列表吗? 我一直在尝试在 asp.net webforms 应用程序中使用 DI 注入控件,发现在递归构建时 ViewState 会丢失。 开发人员在应用程序中实施 IoC/DI 之前需要注意的问题的文章列表也会很有帮助。


DI 本身没有问题。或者更准确地说,这就像枚举通用编程陷阱,比如传递一个空引用,然后不检查它。

递归构建时 ViewState 丢失

正如某些容器所说,“堆积”通常是一个坏主意,应尽可能避免。看看温莎常见问题解答 http://stw.castleproject.org/Windsor.FAQ.ashx#Why_cant_Windsor_resolve_concrete_types_without_registering_them_first_10出于一些反对积累的充分理由。这适用于所有 IoC 容器。

特别是,在您的情况下,似乎发生的情况是在控件的 LoadViewState() (或页面的 LoadPageStateFromPersistenceMedium())之后发生累积,因此它使视图状态无效。也许你的 IoC 容器提供了一个基本控制类,它已经处理了这个问题,而你忘记了继承它。

恕我直言,在 WebForms 中进行 DI 是如此的 hackish(例如本例),以至于我更喜欢​​诉诸服务位置(仅适用于 WebForms 页面和控件!)。简单,不需要奇怪的技巧。

Now, IoC + DI can有一些问题,例如生命周期/范围问题。Igor Brejc 在本文中对此进行了非常全面的介绍 http://igorbrejc.net/development/c/the-delicate-dance-of-transience。您必须牢记这一点,特别是在具有大量组件的复杂/大型应用程序中。

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

依赖注入陷阱 的相关文章

  • Angular2 与 ASP.NET 5 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在将 Angular2 与 ASP NET5 gulp 和 typescript 结合使用 当我解决
  • DateTime.Parse("2012-09-30T23:00:00.0000000Z") 始终转换为 DateTimeKind.Local

    我想解析一个表示 UTC 格式的日期时间的字符串 我的字符串表示形式包括 Zulu 时间规范 该规范应指示该字符串表示 UTC 时间 var myDate DateTime Parse 2012 09 30T23 00 00 0000000
  • requestValidationMode 2.0 和 4.0 有什么区别

    这是 MSDN 的定义 4 0 默认值 HttpRequest 对象在内部设置一个标志 指示每当访问任何 HTTP 请求数据时都应触发请求验证 这保证了在请求期间访问 cookie 和 URL 等数据之前触发请求验证 配置文件中的页面元素
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 通过 SharpDX 渲染 Direct2D 图像时如何使用内存流而不是文件?

    设置 考虑使用给定的临时程序SharpDX http code google com p sharpdx Direct 库的托管包装器 用于渲染位图并将其保存为 PNG namespace ConsoleApplication5 using
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • IIS7 上的 ASP.NET 应用程序 - iisreset 后启动速度非常慢

    我有一个在 Windows 2008 上的 IIS7 下运行的 ASP NET 3 5 网站 当我重新启动 IIS iisreset 然后点击一个页面时 初始启动非常慢 我在 Process Explorer 中看到以下活动 w3wp ex
  • 当checked属性为false时,单选按钮默认被选中?

    我正在尝试生成单选按钮 有条件地检查检查的属性 如果该值存在于数据库中 则应选择它 否则检查的属性为 false 所以最初数据库中没有行 所有单选按钮的检查属性也为 false 但仍然在 UI 上选择 请参见下图 所以不知道这是默认行为还是
  • 获取所有查询字符串对并初始化字典的最佳方法

    我想将所有键 值对存储在我的查询字符串中 www example com a 2 b 3 c 34 进入字典 有没有一种快速的方法可以做到这一点 而无需手动循环所有项目 Try HttpUtility ParseQueryString 它给
  • 将 HTML 表格导出到 Excel

    我在 ASP NET MVC 视图页面上有 HTML 表 现在我必须将该表导出到 Excel 1 我使用部分视图 Inquiries ascx 来显示数据库中的表数据 使用LINQ to Entity 2 我还使用了 UITableFilt
  • HTML 属性 bgcolor 已弃用:用什么代替?

    VStudio ASP NET 给出以下消息 Attribute bgcolor is considered outdated A newer construct is recommended 推荐的结构是什么 bgcolor是在一个 td
  • 使用 json 向 RESTful WCF 发送 Post 请求

    我已经尝试了每种组合来发送请求 以从 jQuery 向 RESTful WCF 发送 POST 请求 有人可以模仿并使其发挥作用吗 代码在这里 http pastebin com Ua97919C http pastebin com Ua9
  • 如何将窗口注入到服务中?

    我正在用 TypeScript 编写一个 Angular 2 服务 它将利用localstorage 我想注入对浏览器的引用window对象到我的服务中 因为我不想引用任何全局变量 例如 Angular 1 x window 我怎么做 这目
  • 正则表达式最多匹配五个单词

    我有一个正则表达式 a zA Z 0 9 1 5 它验证该单词包含字母数字字符和少数特殊字符 并且长度不应超过5人物 如何使此正则表达式接受最多五个与上述正则表达式匹配的单词 a zA Z 0 9 1 5 s a zA Z 0 9 1 5
  • 使用 DependencyResolver 通过 MVC 3 进行控制器实例化时出错

    我正在使用 MVC 3 并在应用程序启动时使用以下代码 UnityContainer container new UnityContainer new UnityMappings container DependencyResolver S
  • 将 Windows 窗体应用程序转换为 Asp.net

    我问的是 您之前使用的将 C Windows 窗体应用程序转换为 ASP NET 的最佳工具是什么 我已经关于这个主题 发现了很多工具 但我希望有人根据他的使用情况推荐最好的工具 我真的不建议使用工具来进行转换 Web 应用程序和 WinF
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • oracle ExecuteNonQuery 在 ASP.Net 上冻结

    我正在尝试使用 ASP C 和 CLR 4 5 中的 Oracle 连接来运行非查询 这是我的代码 string connectionString ConfigurationManager ConnectionStrings OracleC
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 保存 JSON 文件以便稍后从中获取其他数据

    我希望能够使用新数据保存我的 json 文件 然后调用该数据 以便我可以再次保存新数据 现在它所做的就是 当我调用 JSON 文件数据的任何部分时 保持与我上次手动保存它时相同 我确实编辑了一些代码并更好地描述了我的问题 提前谢谢您 这是我
  • iframe 中的位置固定 div 不起作用

    我正在开发 facebook iframe 应用程序 我在此应用程序中有一个弹出消息框 那个弹出窗口有固定位置 但它不能像添加到没有滚动的 iframe 中那样工作 如果弹出窗口在没有滚动的 iframe 中 是否可以使其固定在位置 如果弹
  • 在 Rails 中使用回形针进行 ajax 上传的简单方法?

    我想知道是否有一个简单的方法 例如一个插件 用回形针在 Rails 中进行 ajax 上传 还是我必须从头开始构建它 Cheers 编辑 另外 我正在寻找非闪存解决方案 你可以试试remotipart http os alfajango c
  • Rails中有类似批量更新的东西吗?

    在Java中 我们有像下面的java代码这样的批处理执行 Statement statement null statement connection createStatement statement addBatch update peo
  • terraform 创建的 Kubenet AKS 未将路由表链接到应用程序网关子网?

    按照这个kubenet 将路由表关联到 appgw 子网 https github com Azure application gateway kubernetes ingress pull 723 当您为应用程序网关创建 AGIC 时 它
  • C# 中的字符串替换[重复]

    这个问题在这里已经有答案了 可能的重复 字符串替换不起作用 https stackoverflow com questions 1558024 string replace not working 我有一个像这样的字符串 string ur
  • Django admin在同一行显示多个字段

    我创建了一个模型 它将自动显示模型中的所有字段并将其显示在管理页面上 现在 我有一个问题 我希望在同一行上有两个字段 为此我必须在 ModelAdmin 中指定字段集 fieldsets None fields firstname last
  • MongoDb 聚合中的条件展开?

    我试图弄清楚是否有一种方法可以在 MongoDB 的聚合框架中编写条件展开代码 我有一个这样的聚合命令 models Users aggregate SELECT project sex 1 salesIndex 1 WHERE match
  • 错误:当前项目不支持运行配置应用程序。无法获取应用ID

    每次我在 Android Studio 中打开项目时 都会出现此错误 Error Run configuration app is not supported in the current project Cannot obtain the
  • R 中的 GSL 库 - 未找到符号

    作为新用户 我对 C 的了解非常有限 我有一些用 C 编写的代码需要在 R 中使用 我尝试使用 gsl integration 库 由于代码需要传递给可能未安装 GSL 库的不同人员 因此我创建了 integration h 文件 其中包含
  • php如何在curl获取请求标头中使用承载令牌?

    下面是一个有效的 C get 请求 public HttpResponseMessage ExecuteEndPoint string endpoint string accessTocken HttpResponseMessage res
  • 创建线程-传递参数

    我正在尝试创建多个线程 每个线程计算素数 我正在尝试使用线程创建将第二个参数传递给函数 它不断抛出错误 void compute prime void arg void arg2 这是我的 main 和创建线程 max prime 之后的
  • 禁用 c++ 模块时使用“@import”,请考虑使用 -fmodules 和 -fcxx-modules

    当我尝试使用 Cocoapods 将 AdMob 集成到 Objective C 项目中时 我就想到了这个问题 禁用 c 模块时使用 import 请考虑使用 fmodules 和 fcxx modules 这是什么错误以及如何修复它 Fi
  • 想要创建一个过滤器来检查 cookie,然后保存来自控制器的对象和引用

    我想创建一个过滤器 它将在我的任何 spring mvc 控制器操作之前执行 我想检查 cookie 是否存在 然后将对象存储在某处current仅请求 然后 我需要从我的控制器操作中引用该对象 如果存在 关于如何执行此操作的建议 要创建过
  • 在python中使用tesseract 3.02的C API与ctypes和cv2

    我正在尝试在 python 中将 Tesseract 3 02 与 ctypes 和 cv2 一起使用 Tesseract 提供了一组公开的 DLL C 风格 API 其中之一如下 TESS API void TESS CALL TessB
  • 你什么时候使用过 C++ 'mutable' 关键字? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 你什么时候用过C mutable关键词 为什么 我认为我从来没有使用过这个关键字 我知道它用于缓存 或者可能是记忆 等用途 但是您需要在什么
  • 无法远程连接到Python Socket

    我已经使用 python 套接字和 Tkinter 创建了一个聊天应用程序 它在本地运行得很好 但是客户端无法远程连接到服务器 当我输入我的公共 IP 地址作为主机时 我已经完全端口转发了我的网络并且我知道如何很好地进行端口转发 当我运行在
  • 如何在 selectizeInput 加载所有选择之前添加微调器? [闪亮的]

    我想制作一个应用程序 2actionButtons 1 在加载之前提交更改selectizeInput2 绘制绘图 我知道如何添加spinner单击后actionButton但大多数情况是当你想展示情节时添加的 但是 是否可以添加一个spi
  • singleton bean如何处理动态索引

    我正在使用 Spring Data Elastic Search 根据请求中的不同标头 我创建 RequestScope 对象 IndexConfig 来保存不同的索引集 似乎正在发挥作用 但我不明白单例bean DocumentA Doc
  • 依赖注入陷阱

    有人在 www 上有一个链接列表来获取 DI 陷阱的好列表吗 我一直在尝试在 asp net webforms 应用程序中使用 DI 注入控件 发现在递归构建时 ViewState 会丢失 开发人员在应用程序中实施 IoC DI 之前需要注