簡體   English   中英

RabbitMq EasyNetQ使用Activator.CreateInstance創建消息

[英]RabbitMq EasyNetQ Create message using Activator.CreateInstance

我有一個我不完全了解的問題。 當我以這種方式創建消息時,它可以工作:

var message = new StartFakeJobCommand();
using (var publishChannel = ApplicationSingleton.Instance.RabbitBus.OpenPublishChannel())
{
    publishChannel.Publish(message);
}

一條消息被放入隊列中,我的偵聽器可以使用它。 但是,當我像這樣使用Activator.CreateInstance創建消息時,它不起作用。 沒有任何內容發布到隊列。

var t = Type.GetType(string.Format("{0}.{1},{2}", job.CommandNamespace, job.Command, job.AssemblyName));
if (t == null)
    throw new ArgumentException();

var message = Activator.CreateInstance(t);
using (var publishChannel = ApplicationSingleton.Instance.RabbitBus.OpenPublishChannel())
{
    publishChannel.Publish(message);
}

在調試期間,我可以清楚地看到使用兩種方法都可以創建相同的類型。 知道為什么第二種方法不起作用嗎?

這就是我訂閱消息的方式:

bus.Subscribe<StartFakeJobCommand>("StartFakeJobCommand_ID", message => fakeJob.Handle(message));

Activator.CreateInstance的簽名為:

public static Object CreateInstance(
    Type type
)

消息的類型是Object,所以您的消息將以Object類型發布,並且由於您沒有Object的訂閱者,因此該消息是黑洞的。

使用正確的泛型類型調用publishChannel.Publish來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM