ASP.NET Web Api 依赖注入 - 单例与否

2023-12-22

我正在使用 asp.net 构建一个 Web api,并使用 UnityContainer 来处理依赖项。

例如,我的身份验证控制器可以依赖于身份验证服务:

class AuthController : ApiController {

    private IAuthService authService;

    public AuthController (IAuthService AuthService) {
        this.authService = AuthService;
    }

    ...
}

我的身份验证服务的实现可以依赖于我的用户存储库:

class AuthController : IAuthService {

    private IUserRepository userRepository;

    public AuthService (IUserRepository UserRepository) {
        this.userRepository = UserRepository;
    }

    ...
}

现在,我知道 Unity 有两种处理依赖关系的方法,它可以在每次需要时创建依赖关系的新实例,或者可以将依赖关系的实例保存为单例,并在每次依赖关系时注入相同的单例必需的。

默认情况下,unity 采用第一种方式(每次创建一个新实例)。

我的问题是:我应该保持这种方式,还是应该告诉 Unity 将我的服务和存储库保持为单例?

当我的用户存储库依赖于某些其他依赖项,而该依赖项又依赖于用户存储库时,我确实想到了这个问题。 当我尝试运行 Web api 时,它抛出堆栈溢出异常,我认为它这样做是因为它每次都必须创建用户存储库和其他存储库的新实例。

谢谢你, 阿里克


您可能想要为每个 HttpRequest 创建一组新的实例。如果某个实例中缓存了某些内容,这可以防止出现一些意外的副作用,从而扰乱某些逻辑。如果您将其范围限制在 HttpRequest 级别,并且您的依赖链依赖于某个存储库 4 次不同的时间,那么它们都将共享该存储库的同一实例。

以下是在 Unity 中执行此操作的方法:MVC、EF - Unity 中的 DataContext 单例实例 Per-Web-Request https://stackoverflow.com/questions/5187562/mvc-ef-datacontext-singleton-instance-per-web-request-in-unity

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

ASP.NET Web Api 依赖注入 - 单例与否 的相关文章

  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • NodeJS:这段代码是否可以多核运行?

    我使用这个节点脚本作为我的项目的 运行程序 需要同时启动 停止三个脚本 现在我想知道从节点进程内部生成的 child process 是否会使用我的服务器拥有的多核 我有 90 的信心认为是 但安全总比抱歉好 var CP require
  • 如何在 C 中声明常量函数指针数组?

    我需要声明一个指向函数的指针数组 如下所示 extern void function1 void extern void function2 void void MESSAGE HANDLERS void function1 functio
  • Blob 不可写

    当我尝试使用 azure 进行 azure db 备份时rm command New AzureRmSqlDatabaseExport 我面临以下问题 Error encountered during the service operati
  • 使用 cordova 设置 android project.properties 文件中的值

    TL DR 我有一个针对 iOS 和 Android 的 cordova 应用程序 有没有办法使用config xml设置 cordova 生成的文件中的值platforms android project properties 更多细节
  • 将数据源设置为 MediaPlayer 中的原始 ID

    在 MediaPlayer create 方法中 可以使用原始文件的 id 但如何在 setDataSource 方法中使用它 参考源码android media MediaPlayer http grepcode com file rep
  • 使用 Instagram gem 获取所有用户的照片

    我想使用 Instagram gem 获取我的所有照片 https github com Instagram instagram ruby gem https github com Instagram instagram ruby gem
  • ios 6 uiwebview 使用 jquery scrolltop 滚动页面时显示背景

    我有一个网页显示在 UIWebView 中 该网页使用 jquery scrollTop 使用 1 6 4 版本的 jquery 在页面加载后将窗口滚动到指定位置 这在 4 5 之前的 xcode 上工作得很好 在我使用 xcode 4 5
  • Delphi 中的 System.IsConsole 什么时候为真?

    根据 System pas 它被记录为True if compiled as console app 在System pas中 还有一个赋值 IFDEF LINUX IsConsole True 我有一个奇怪的问题 使用 ShellExec
  • sqlalchemy 中的 python 继承

    所以我对 python 和 sqlalchemy 很陌生 我需要一些继承或混合 而不是继承 方面的帮助 我有一些伪代码 但我还没有真正取得任何进展 Base declarative base class ModelBase Base Bas
  • 给定两个顶点绕中心点旋转线

    我一直在尝试将一堆线旋转 90 度 它们一起形成多段线 每条线包含两个顶点 例如 x1 y1 和 x2 y2 我目前正在尝试做的是绕线的中心点旋转 给定中心点 x1 x2 和 y1 y2 由于某种原因 我不太懂数学 我无法让线条正确旋转 有
  • .NET 4.5 中的内存模型发生了哪些变化?

    我刚刚在 Peter Richtie 博客中读到了这令人费解的一行 我需要帮助才能理解其含义Prior to NET 4 5 you really programmed to the NET memory model http msmvps
  • 在 Flex 中循环元素内的元素

    我在 Flex 4 中有以下功能 protected function initEventHandlers void imageContainer addEventListener DragEvent DRAG ENTER acceptDr
  • 如何序列化/反序列化哈希图?

    我有一个包含数百万个条目的大型哈希图 我想将其持久化到磁盘 这样当再次从磁盘读取它时 我就没有将键值对再次插入到映射中的开销 我正在尝试使用谷物图书馆来做到这一点 但似乎HashMap http hackage haskell org pa
  • Javafx 2 树视图过滤

    如何在 JavaFX 2 中过滤节点TreeView 我有一个TextField我想根据内容过滤所有节点 例如节点标签 TextField Thanks 这是我编写的可重复使用的可过滤树项目类 过滤器应该绑定在谓词属性 你呢must use
  • 根据Text动态获取UILabel的高度对于iOS 7.0和iOS 6.1返回不同的值

    我正在使用此方法动态获取 UILabel 的高度 CGSize GetSizeOfLabelForGivenText UILabel label Font UIFont fontForLabel Size CGSize LabelSize
  • 将文本读取为 UTF-8 编码

    假设我编写一个函数来解析包含德语的输入流 下面是一个玩具示例 以下内容在我的机器上有效 因为 UTF8 是标准 readLines textConnection Z rich readLines textConnection Z u00FC
  • drawRect 和 CGGraphicsContext 如何工作?

    我正在处理 Core Graphic 中的一些内容 并且正在寻找有关几个主题的一些额外说明 绘制矩形 我对此有所了解 并且知道这是 UIView 的所有绘图方面的所在 但我只是不清楚幕后发生的事情 当我创建一个 UIView 并填写 dra
  • 现在有什么好的 Eclipse 持续测试插件吗?

    我用过麻省理工学院持续测试 http groups csail mit edu pag continuoustesting 插件在过去 但它早已过时 并且不再与任何接近现代版本的 Eclipse 兼容 有人有好的替代品吗 免费自然是首选 我
  • 通过 gradle FileTree.include 删除目录

    我想说 clean delete fileTree a include subdir include aFile 删除目录 subdir 和文件 aFile 但 subdir 并没有被删除 我可以明确地列出它 clean delete a
  • ASP.NET Web Api 依赖注入 - 单例与否

    我正在使用 asp net 构建一个 Web api 并使用 UnityContainer 来处理依赖项 例如 我的身份验证控制器可以依赖于身份验证服务 class AuthController ApiController private