.NET 中带有 Unity IOC 容器的 RabbitMQ

2024-02-10

我使用 Unity App Block 作为 WCF 项目服务层的 IOC 容器。使用 Unity.WCF 库将其插入到每个 WCF 服务中,效果非常好。

我最近将 RabbitMQ 引入了我的服务层,目前我正在使用“using”块来连接并添加到队列中。我不喜欢这个,但我希望使用HierachicalLifetimeManager在需要时创建和销毁与 RabbitMQ 的连接?这听起来正确吗?

我正在寻找这样的示例,或者至少寻找一些有关最佳方法的指导? (例如,我应该封装连接并根据需要注入到每个服务中吗?我将如何封装 RabbitMQ 消费者等?)


我建议注册IConnection作为单身人士。

要注册IConnection作为 Unity 中的单例,您将使用ContainerControlledLifetimeManager, e.g.

var connectionFactory = new ConnectionFactory
{
    // Configure the connection factory
};
unityContainer.RegisterInstance(connectionFactory);

unityContainer.RegisterType<IConnection, AutorecoveringConnection>(new ContainerControlledLifetimeManager(),
    new InjectionMethod("init"));

The AutorecoveringConnection例如,一旦第一次解决就会一直存活,直到拥有UnityContainer被处置。

因为我们已经注册了ConnectionFactory with Unity,这将自动注入到构造函数中AutorecoveringConnection. The InjectionMethod确保第一次AutorecoveringConnection解决了,则init方法被调用。

至于你是否应该从服务中抽象出 RabbitMQ 的问题,我的答案是肯定的,但是我不会简单地创建一个IMessageQueue抽象。想想你使用消息队列的目的是什么,是为了推送状态吗?如果是这样,请有一个IStatusNotifier与 RabbitMQ 的具体实现的接口。如果要获取更新,请有一个IUpdateSource与 RabbitMQ 的具体实现的接口。你可以明白我要说的是什么。

如果您为消息队列创建抽象,则您将自己限制为仅在所有消息队列实现中可用的功能。通过不同的实现IStatusNotifier对于不同的消息队列实现,您可以利用不同技术特有的功能,同时在将来使用完全不同的技术时保持灵活性(例如写入 SQL 数据库或输出到控制台)。

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

.NET 中带有 Unity IOC 容器的 RabbitMQ 的相关文章

  • 检查内部异常的最佳方法?

    我知道有时 innerException 为 null 因此以下操作可能会失败 repEvent InnerException ex InnerException Message 有没有一种快速的三元方法来检查innerException是
  • 使用 WCF 的契约优先 SOA

    这个问题更多的是探索人们在社区中 在实际情况中所做的事情 而不是一个有针对性的问题 我对此进行了相当广泛的搜索 虽然我发现很多博主都提倡契约优先的服务设计 并且有一些评论支持它们 但我还没有找到很多关于使用 WCF 实现契约优先的实用信息
  • 拆箱未知类型

    当类型本身未知时 我试图找出支持将整数类型 short int long 拆箱为其内在类型的语法 这是一个完全人为设计的示例 演示了这个概念 Just a simple container that returns values as ob
  • 如何读取 Excel XML (C#)

    我想知道是否有一种简单的方法来读取Excel 2010 XML 该 XML 的结构与我以前阅读的不同 特别是 ss index 属性 ss Index 7 使事情变得更加复杂 EDIT 为了更好地解释 我有一个带有 XML 扩展名的文件 可
  • TargetType="controlType" 和 TargetType="{x:Type controlType}" 之间的区别

    在 WPF 中 您可以设置TargetType类型的名称 或者您可以将其设置为 x Type nameOfType 有谁知道有什么区别 没有什么 由于属性类型是Type XAML 解析器知道尝试将您提供的任何内容转换为Type 在其他情况下
  • 使用 DbContext 进行模型优先,无法初始化新数据库

    我放弃 我找到了这个 http blogs msdn com b adonet archive 2011 03 15 ef 4 1 model amp database first walkthrough aspx http blogs m
  • 使用空值初始化枚举

    如何创建具有空值的枚举 ex public enum MyEnum StringValue X MyX StringValue Y MyY None 其中 None 值为 null 或 String Empty 你可以尝试这样的事情 pub
  • 文字和隐式缩小转换

    a 下面的赋值不应该导致错误吗 因为数字 100 是类型的文字int由于编译器不允许隐式缩小转换 byte b 100 b 如果编译器没有抱怨隐式缩小转换整型文字 to 类型字节 那么为什么它不允许隐式缩小转换双字面量 to 浮动类型 我意
  • 无法安装NuGet包

    我正在尝试将 Unity 包添加到我的解决方案中 但我不断收到列出的消息 尝试解决依赖项 Unity 3 5 1404 0 Unity 已经具有为 CommonServiceLocator 定义的依赖项 知道如何解决这个问题吗 旧版本的 n
  • 每 4 个循环新表行

    如何在 Razor 视图中每 4 个循环创建一个新表行 这是为 4 之前的每个数字创建一个新行 然后停止创建新行 int i 0 foreach var item in ViewBag ProgramIdList if i 4 0 tr t
  • 在生产服务器上安装 VS.NET 是否安全且可以接受? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通常 我们在生产服务器上安装 VS NET 以便在必要时轻松解决我们产品的问题 这是好主意还是坏主意 调试和开发应该在 安全 环境中完成 这不是
  • C# 可以扩展数组吗?

    我习惯向 IEnumerable 等外部类添加方法 但是我们可以在 C 中扩展数组吗 我计划向数组添加一个方法 将其转换为 IEnumerable 即使它是多维的 不相关如何在 C 中扩展数组 https stackoverflow com
  • 服务具有零个应用程序(非基础设施)端点

    我最近创建了一个WCF服务 dll 和一个服务主机 exe 我知道我的 WCF 服务工作正常 因为我能够成功地将服务添加到 WcfTestClient 但是 当我从服务主机 exe 使用 WCF 时 我似乎遇到了问题 我可以将对 WCF d
  • WinApi:获取 COM 表单的控件名称

    我想用 Net 框架替换我当前的 UI 自动化工具 QTP 我需要测试 VB6 COM 应用程序 框架的基础之一是使用表单名称 到目前为止 我未能找到使用 Win API 获取这些数据的方法 该解决方案只有一个约束 即该解决方案必须依赖 N
  • 服务层设计。将事物放入服务层的原因

    我有一些与设计相关的问题 should service layer interfaces居住在一个domain layer 例如user service 将代码部分移动到单独层的主要原因是什么 should service layer居住在
  • System.Drawing.Image.Save 抛出ExternalException:GDI 中发生一般错误

    我有一个函数 它需要一个位图 复制它的一部分并将其保存为 8bpp tiff 结果图像的文件名是唯一的并且文件不存在 程序有权写入目标文件夹 void CropImage Bitmap map Bitmap croped new Bitma
  • 为什么我的 COM 对象不显示组件服务中的方法?

    我正在尝试创建一个 COM 对象并将其注册到 COM 下 一切似乎都很顺利 但是当我查看组件服务并深入了解时 控制台根目录 组件服务 电脑 我的电脑 COM 应用程序 测试通讯 组件 TestCom Com MyCom 接口 MyCom 方
  • IL 的仿制药?

    是否可以在 IL 生成器中使用泛型 DynamicMethod method new DynamicMethod GetStuff typeof int new Type typeof object ILGenerator il metho
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐