Dispose() 和 Ninject 指南

2023-12-23

因此,我有一个从 WCF 服务公开的方法,如下所示:

public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
    var response = new GetAllCommentsResponse();

    using(_unitOfWork)
        try
        {
            Guard.ArgNotNull(request, "request");

            var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();

            //... Do rest of stuff here
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.FailureInformation = ex.Message;
            Logger.LogError("GetAllComments Method Failed", ex);
        }

    return response;
}

我有一个全局 DataUnitOfWork 对象(实现 IDisposable),当服务调用进入时,Ninject 通过构造函数参数实例化该对象。调试时,如果我使用

using(_unitOfWork)

_unitOfWork 对象在超出范围后立即被处置,然后被 Ninject 再次调用(尽管它已被标记为已处置,所以什么也不会发生。)如果没有 using 语句,Ninject 会处理处置。

长话短说,这有通用的经验法则吗?我一直对整个 IDisposable 东西感到害怕,因为我读到的所有内容似乎都表明永远不要使用它,或者在某些不拘一格的情况下使用它,但它总是让我感到困惑。

任何意见都会受到赞赏。

哦,当我在这里打字时,为什么在处置时会调用 GC.SuppressFinalize() 呢? Dispose 和 Finalize 有什么不同?


CLR 文档指出,创建 Disposable 对象的人负责调用 Dispose。在本例中,该对象是由 Ninject 创建的。这意味着你应该not显式调用 Dispose。

Ninject 处理具有除InTransientScope 一旦创建的对象所绑定的作用域对象被 GC 收集 https://web.archive.org/web/20130111064153/http://kohari.org/2009/03/06/cache-and-collect-lifecycle-management-in-ninject-20/。这就是为什么每个一次性对象都应该是Bindd 的范围不是InTransientScope()。例如。您可以使用InParentScope() from 命名范围扩展 https://github.com/ninject/ninject.extensions.namedscope/wiki一旦注入的对象被垃圾回收,它将立即处理该对象。

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

Dispose() 和 Ninject 指南 的相关文章

  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • GraphQL:成功突变后如何发出警告?

    让我们想象一下我有一个createPost插入新帖子的突变 在典型的应用程序中 该突变可以 成功 返回一个Post 失败 抛出错误 我使用阿波罗错误 https github com thebigredgeek apollo errors来
  • 如何在 AWS Lambda 中缓存多个 AWS Parameter Store 值?

    我想限制在 AWS Lambda 中调用 AWS Parameter Store 的次数 使用全局变量 我在第一次调用 Parameter Store 时缓存 Parameter Store 值 main py import os impo
  • Highcharts x 轴日期时间的最大间隔?

    我有一张每日图表 涵盖 00 00 到 23 59 但对于实时数据 假设当前是上午 9 点 默认情况下它会将图表从 00 00 拉伸到 09 00 这对我来说看起来不太好 我想要的是当天 23 59 处的 x 轴最大值 因此它将把 09 0
  • 检查文件是否正在使用 VBS

    我想制作一个小的 VBS 脚本来告诉用户文件是否正在使用 我有一个文件 如果该文件正在使用 VBS 应该给我一条消息 表明该文件正在使用 如果文件没有被任何进程使用 VBS 应该给我消息说文件没有被使用 我试过this http suppo
  • Swift - 如何关闭所有视图控制器以返回根目录

    我希望我的应用程序可以在每次用户需要时转到第一个视图控制器 所以我想创建一个函数来关闭所有视图控制器 无论它是被推入导航控制器还是以模态方式呈现或打开任何方法 我尝试了各种方法 但我未能肯定地关闭所有视图控制器 有简单的方法吗 尝试这个 s
  • 使用 Swift 3 的 FB 登录不返回任何值,并且在成功登录后不让用户返回应用程序

    我在用着iOS 10 Swift 3集成FB Login 我已遵循以下所有步骤Facebook文档 现在的问题是 成功登录后 它不会返回任何值 也不会让用户返回应用程序 注意 同样适用于Swift 2 您好 我向 facebook 开发人员
  • 针对 API 目标的计划 EventBridge 规则

    是否可以创建一个 EventBridge 规则 该规则可以安排在一天中的特定时间运行并调用 API 作为自定义目标 如果目标是 AWS 或合作伙伴服务 则似乎可以为目标设置计划 但如果它们是自定义配置的端点 则不能为目标设置计划 我想做的就
  • 服务引用错误:无法生成服务引用的代码

    我有一个 Windows 服务解决方案 并尝试在 VS2010 中添加对 Hermes 开源 ebms 消息服务器 Web 服务的服务引用 我可以使用 Web 服务的 URL 找到它 但是当我尝试填充服务引用时 我在 Visual Stud
  • SQL Server 中 BIT 字段比 int 字段快吗?

    我有一些字段的表 其值将为 1 0 随着时间的推移 该表将变得非常大 使用位数据类型好还是使用不同类型来提高性能更好 当然 所有字段都应该建立索引 我无法为您提供任何有关性能的统计数据 但是 您应该始终使用最能代表您的数据的类型 如果您想要
  • Angular 2 - 路由 - CanActivate 与 Observable 配合使用

    我有一个验证卫士 用于路由 实现可以激活 canActivate return this loginService isLoggedIn 我的问题是 CanActivate result 取决于 http get result 登录服务返回
  • 使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON

    我认为这是 R 管道工库的一个很好的快速演示 但主要是我正在努力以 csv 格式提供数据 我正在使用 R 的管道工包来托管我的一些体育数据的 API 端点 目前 我有一些数据可以获取我正在尝试提供的 MLB 棒球队的获胜总数 使用水管工 我
  • Python matplotlib 错误栏问题

    给定这些 numpy 数组 x 0 1 2 3 4 5 6 7 8 9 y 0 0 02083473 0 08819923 0 9454764 0 80604627 0 82189822 0 73613942 0 64519742 0 56
  • 应用程序未安装错误

    我为我的 Nexus 7 创建了一个未签名的 apk 当我尝试安装它时 设备会弹出 应用程序未安装 在 Eclipse 模拟器中一切正常 我尝试将目标更改为 4 2 4 3 4 4 同样 所有工作都在模拟器中进行 但不在设备上进行 设备运行
  • 通过循环依赖从 Jersey 获取 JSON

    我正在编写一个使用 Jersey 和 JAXB 的服务 我的类使用 XMLRootElement XMLElement 等进行注释 我在两个类之间存在循环依赖关系 因此我使用 XMLTransient 注释了循环依赖属性 因此 当我调用我的
  • 如何在登录时通过 JWT 令牌从 Azure Active Directory 传递自定义扩展属性?

    我在 Azure Active Directory 中有自定义扩展属性 通过 Azure AD Connect 映射 Azure AD 上的扩展属性采用以下形式extension
  • 使用 H2 控制台访问 mem 或 fs 数据库表

    我正在尝试访问 Play 中应用程序的表格 框架 但我无法使用控制台找到它 例如 我有两个实体模型 Address and Campus 我可以正常创建对象并保存 但我想查看 fs 或 mem DB 中的更改 但 H2 控制台不显示表Add
  • 如何获取反应传单地图的边框并检查地图内的标记?

    我的代码在这里 import React useState useEffect useRef from react import restaurantsInfo from RestaurantsList json import App cs
  • 如何将对象数组转换为一个特定对象?

    所以 我在上次面试中完成了一项很小但对我来说很难的任务 我只是重新设置了如何解决它 我认为我们需要在这个任务中实现递归 但我不清楚 任务 let arr name width value 300 name height value 100
  • 合并 pandas DataFrame 时如何保留列 MultiIndex 值

    我有两个 pandas DataFrame 如下所示 df1 pd DataFrame Q1 SubQ1 1 2 3 Q1 SubQ2 1 2 3 Q2 SubQ1 1 2 3 df1 ID a b c df2 pd DataFrame i
  • Dispose() 和 Ninject 指南

    因此 我有一个从 WCF 服务公开的方法 如下所示 public GetAllCommentsResponse GetAllComments GetAllCommentsRequest request var response new Ge