Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问使用者内的对象_C#_Rabbitmq_Masstransit - Fatal编程技术网

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#

我正在构建一个原型,现在消费者项目是一个控制台应用程序。在Main
program.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));