Nei*_*sey 9 .net unity-container rabbitmq
我使用Unity App Block作为我的WOC项目服务层的IOC容器.使用Unity.WCF库将其插入每个WCF服务时,这非常有效.
我最近将RabbitMQ引入了我的服务层,我目前正在使用"使用"块来连接并添加到队列中.我不喜欢这个,我想用它HierachicalLifetimeManager来创建和销毁我与RabbitMQ的连接,因为我需要它们?这听起来不错吗?
我正在寻找一个这样的样本,或者至少是关于最佳方法的一些指导?(例如,我是否应该封装连接并根据需要注入每个服务?我将如何封装RabbitMQ使用者等?)
我建议将其注册IConnection为单身人士。
要将 注册IConnection为 Unity 中的单例,您可以使用ContainerControlledLifetimeManager,例如
var connectionFactory = new ConnectionFactory
{
// Configure the connection factory
};
unityContainer.RegisterInstance(connectionFactory);
unityContainer.RegisterType<IConnection, AutorecoveringConnection>(new ContainerControlledLifetimeManager(),
new InjectionMethod("init"));
Run Code Online (Sandbox Code Playgroud)
该AutorecoveringConnection直到所属例如,一旦解决了,第一次将活路UnityContainer配置。
因为我们已经注册了ConnectionFactorywith Unity,这会自动注入到 的构造函数中AutorecoveringConnection。在InjectionMethod确保了第一次AutorecoveringConnection得到解决,该init方法将被调用。
至于你是否应该从你的服务中抽象出 RabbitMQ,我的回答是肯定的,但我不会简单地创建一个IMessageQueue抽象。想想你使用消息队列的目的是什么,是为了推送状态?如果是这样,请IStatusNotifier为 RabbitMQ 提供一个具有具体实现的接口。如果要获取更新,请使用具有IUpdateSourceRabbitMQ 的具体实现的接口。你可以看到我要去哪里。
如果您为 Message Queue 创建抽象,您将自己限制为仅在所有 Message Queue 实现中可用的功能。通过IStatusNotifier为不同的 Message Queue 实现使用不同的实现,您可以利用不同技术独有的功能,同时在将来使用完全不同的技术时保持灵活性(例如写入 SQL 数据库或输出到安慰)。