如何通过 Unity 和 DependencyResolver 使用会话值

2024-01-06

我正在使用 MVC4 和 Unity 2.1。我的服务需要基于从会话状态检索到的凭据的服务密钥。

我像这样注册我的服务:

container.RegisterType<IInventoryService, InventoryService>();

InventoryService 的构造函数同样简单:

public InventoryService(ServiceKey serviceKey) {  ...  }

在我的网站中,当我需要服务时,我使用服务定位器,该定位器使用会话中的凭据自动组成服务密钥。

public static T Resolve<T>(ServiceKey serviceKey = null)
    {
        if (serviceKey == null)
        {
            serviceKey = SessionManager.ServiceKey;
        }

        var parameterOverride = new ParameterOverride(SERVICEKEY_PARAMETERNAME, serviceKey);

        return Resolve<T>(null, parameterOverride);
    }

这效果很好。问题是,我现在正在将站点转换为 MVC,并尝试使用简单的依赖项解析器将服务注入控制器,该依赖项解析器使用我现有的服务定位器(依赖项工厂):

public class CustomDependencyResolver : IDependencyResolver
{
    public object GetService(Type serviceType)
    {
        return MvcDependencyFactory.Resolve(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return MvcDependencyFactory.ResolveAll(serviceType);
    }
}

我的控制器看起来像:

public InventoryController(IInventoryService inventoryService) { ... }

问题是 MVC 仍然抱怨在尝试实例化库存控制器时找不到无参数构造函数。我认为这是因为我没有在Unity中注册服务密钥。但如果我尝试这样做,我会发现 MVC 正在尝试解析控制器,然后在会话构建之前解析服务。

难道我没有正确思考这个问题吗?每一步都感觉非常合理——在服务中使用会话凭据,在控制器中使用服务,使用解析器来帮助构建控制器——但我一直在绞尽脑汁地让这一切发挥作用。


您可以使用 Unity 中的 InjectionFactory (Microsoft.Practices.Unity.InjectionFactory) 来指定一个函数来处理依赖项的解析。该函数仅在依赖关系解决后才会执行。在下面的示例中,“c”是作为参数传递的 Unity 容器,以便您可以在函数中执行其他解析。

replace:

container.RegisterType<IInventoryService, InventoryService>();

with:

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

如何通过 Unity 和 DependencyResolver 使用会话值 的相关文章

随机推荐

  • preg_replace PREG_BAD_UTF8_ERROR

    我有一个烦人的问题preg replace和字符集 我正在做一对preg replace连续但不幸的是第一次出现任何特殊字符 例如 由 preg replace 插入我得到PREG BAD UTF8 ERROR在随后的通话中 除了插入的特殊
  • TEE 之后如何处理镜像(重复)的 iptables 流量?

    我有一个关于使用 TEE 选项 iptables 流量进行镜像的问题 主要目标是将服务器 A 端口 1935 上服务的所有流量复制到服务器 B 上同一端口 端口 1935 上运行的相同服务 例如 如果我开始将视频流式传输到 192 168
  • Maven 插件,用于创建可执行 jar,其依赖项未解压(jar with jars)

    我阅读了很多使用依赖项构建可执行 jar 的解决方案 maven 阴影插件 maven 依赖项插件 maven 程序集插件 所有这些插件都会解压依赖项 jar 并将它们重新打包到可执行 jar 中 唯一将解压到可执行 jar 中的依赖项 j
  • 外键中的循环依赖:使用还是避免?

    我的应用程序将数据库中的大量数据加载到复杂的数据结构中 内存中的数据结构类似于数据库的结构 这意味着如果数据库包含以下表 表A 键为A1 表 B 键为 B1 其中一列是表 A 的键 的外键 表 C 键为 C1 其中一列是表 B 的键 的外键
  • 如何在Android Studio中使用Google Cloud Translation API?

    我正在制作一个用于语言翻译的 Android 应用程序 到目前为止 我已经使用语音识别器意图将语音输入转换为字符串 现在我想将该字符串翻译成另一种语言 并使用 TTS 引擎说出翻译后的文本 我创建了一个单独的translate test文件
  • 如何将视图模型传递到布局/母版页?

    在谷歌搜索了一段时间后 我对如何在 asp mvc 3 中执行此操作有点困惑 因此 任务是为多个控制器的视图提供一个通用的布局 或主 页面 所有视图本身都是强类型的 这个布局页面实际上可视化了一些强类型对象 因此 我需要将此对象传递到布局页
  • 在 Matplotlib 中使用获取和设置轴方法的相对坐标

    控制位置的一种方法figure反对新的axes应该是通过使用add axes方法 此方法接受 4 个值的列表或元组 这些值表示 左 下 宽 高 其中所有数量均以图形宽度和高度的分数形式表示 例如 import matplotlib fig
  • 如何确定特定动画帧何时运行

    我想知道动画的某些帧何时运行以设置各种条件 在下面的代码中 如何使用计数器或设置条件来确定特定动画帧 例如第 3 帧和第 8 帧 当前正在运行的时间 NSMutableArray frameArray NSMutableArray arra
  • 从Python脚本解析PHP文件变量

    我需要从我的 Python 脚本的 PHP Wordpress 配置文件中获取一些数据 我如何解析配置数据 例如 我怎样才能得到 wp 版本价值 配置示例 The WordPress version string global string
  • Java中有没有办法在不传输或下载的情况下获取图像的宽度和高度?

    为了获得图像的高度 我们可以使用ImageIO read new URL getHeight https docs oracle com javase 8 docs api java awt image BufferedImage html
  • 将数字转换为 16 位浮点数(以字节形式存储)并返回?

    出于 有损 压缩的目的 我希望能够将 Javascript 数字转换为 16 位浮点表示形式 以存储在 Uint16Arrays 或 Uint8Arrays 以最简单的为准 中 然后我希望能够从2 个字节对应一个数字 我不需要对 16 位数
  • numpy.fft() 返回值幅值+相移或角度是多少?

    np fft fft 返回一个复数数组 复数的含义是什么 我想实部是振幅 虚部是相移 相位角 或者是其他东西 我发现数组中的位置代表频率 这并不是一个真正的编程问题 也不特定于numpy 简而言之 复数的绝对值 sqrt x real 2
  • 如何进行不区分大小写的字符串替换

    嗨朋友们我正在创建一个应用程序 我想在其中找到一个特定的单词ArrayList我必须更换用另一个词来说 我使用了下面的代码 它区分大小写 但我想让它不区分大小写 FillintheBlank class public class Filli
  • 使用 multer-s3 nodejs 将图像上传到亚马逊 s3

    我正在尝试使用将图像上传到亚马逊 s3multer s3 但我收到此错误 类型错误 预期 opts s3 为对象 node modules multer s3 index js 69 20 这是我的服务器代码 var upload mult
  • POM错误:找不到org.springframework.boot

    我一直在尝试设置一个春季启动项目但收到错误 我研究并尝试了各种选择 但到目前为止还没有运气 任何帮助 将不胜感激 项目构建错误 Non resolvable parent POM Failure to find org springfram
  • 在 sed 替换字符串中转义换行符

    这是我尝试更换b带有换行符的字符使用sed在跑步的时候bash gt echo abc sed s b n anc 不 不是那样的 gt echo abc sed s b n a nc 不 也不是这样 我想要的输出是 a c HELP 看起
  • 为什么 JSON.stringify 会搞砸我的日期时间对象?

    id 1533 story type id 1 content id 470 created at Sun 05 Feb 2012 07 02 43 GMT updated at Sun 05 Feb 2012 07 02 43 GMT t
  • Firebase 云功能与 Firestore 返回“已超出截止日期”

    我从 Firestore 文档中获取了示例函数之一 并能够从本地 firebase 环境成功运行它 但是 一旦我部署到 Firebase 服务器 该功能就会完成 但 Firestore 数据库中不会创建任何条目 firebase 函数日志显
  • CucumberJS:每一步后截图

    有谁知道如何截图everycucumberjs 中场景的步骤 并将其附加到 json 报告中 显然 这可以通过自定义报告器使用 Cucumber 事件处理程序来完成 browser takeScreenshot then png any g
  • 如何通过 Unity 和 DependencyResolver 使用会话值

    我正在使用 MVC4 和 Unity 2 1 我的服务需要基于从会话状态检索到的凭据的服务密钥 我像这样注册我的服务 container RegisterType