C# 访问使用者内的对象
我正在从事一个项目,该项目使用C# 访问使用者内的对象,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,我正在从事一个项目,该项目使用MassTransit和RabbitMQ在C# 我正在构建一个原型,现在消费者项目是一个控制台应用程序。在Mainprogram.cs类中,我连接到总线并订阅以接受来自发布者的消息,如下所示: var bus = BusInitializer.CreateBus("Subscriber", x => { x.Subscribe(subs => {
MassTransit
和RabbitMQ
在C#
我正在构建一个原型,现在消费者项目是一个控制台应用程序。在Mainprogram.cs
类中,我连接到总线并订阅以接受来自发布者的消息,如下所示:
var bus = BusInitializer.CreateBus("Subscriber", x =>
{
x.Subscribe(subs =>
{
subs.Consumer<UpdatedInformation>().Permanent();
});
});
下面是一个消费者类别的示例:
class UpdatedInformationConsumer : Consumes<UpdatedInformation>.Context
{
public void Consume(IConsumeContext<UpdatedInformation> message)
{
Console.Write("\nMessage: " + message.Message);
Console.Write("\nPROCESSED: " + DateTime.Now.ToString());
}
}
类updateInformationConsumer:Consumes.Context
{
公共void消费(IConsumeContext消息)
{
控制台。写入(“\n消息:+message.message”);
Write(“\n进程:”+DateTime.Now.ToString());
}
}
在订阅服务器的主类中,我还初始化服务和其他配置。我需要做的是能够访问我的使用者类中的那些服务/对象,因为我不希望每次在使用者类中收到消息时都初始化新的服务/对象
这应该相对容易,但我很困惑,因为我实际上并没有创建我的消费者类的实例。与其在服务中放置一堆单例,这会导致一堆静态方法等等,不如使用订阅指定一个消费者工厂,将这些依赖项传递给消费者。您还可以使用任何受支持的容器(甚至您自己的容器)来解决这些依赖关系
x.Subscribe<UpdatedInformationConsumer>(() =>
new UpdatedInformationConsumer(dependency1, dependency2, etc));
x.Subscribe(()=>
新更新的信息使用者(dependency1、dependency2等);
每个消息接收都将创建一个新的使用者实例,因此对象生命周期也可以通过这种方式进行管理。您是否考虑过初始化服务和配置的单例模式@当然,我完全想得太多了,忽略了最简单的解决方案!如果您想添加更多信息并给出答案,我会将其标记为已接受,以帮助将来有类似问题的任何人。谢谢,这是我一直在寻找的。由于必须打开一个文件,当两个线程试图初始化单例时,我遇到了问题。这是一个更干净的解决方案。是的,你可以从容器中解析你的消费者。还有许多容器的集成,这些容器也将开始/结束每条消息的生命周期范围。比如MassTransit.Autofac。
x.Subscribe<UpdatedInformationConsumer>(() =>
new UpdatedInformationConsumer(dependency1, dependency2, etc));