【发布时间】:2011-12-12 00:27:16
【问题描述】:
我需要在控制台应用程序运行时从控制台应用程序 (NServiceBus selfhost) 访问静态属性。这可能吗?
执行 NServiceBus 控制台时,在我的启动类中设置了一个静态属性:
public static IBus Bus { get; private set; }
public static void Init()
{
Bus = NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender(false)
.CreateBus()
.Start();
}
NServiceBus 控制台应用程序中的另一个类调用静态总线属性。我只是引用关联的控制台应用程序 dll 来获取此消息对象。我创建这个消息对象来调用它的公共方法“SendRouteMessageReceived”。但是,我需要将此处的总线设置为在执行 NServiceBus 控制台期间实例化的总线(如上代码所示)。
public class OrderMessaging
{
public IBus Bus { get; set; }
public void SendRouteMessageReceived(LabRoutingUpdateMessage routingUpdateMessage)
{
Bus.Send(new RouteMessageReceived(routingUpdateMessage));
}
}
我的 WPF 应用程序中用于实例化消息对象并将消息发送到 NServiceBus 的 C# 代码:
MyBus.OrderManagement.OrderMessaging routeMessageReceived = new MyBus.OrderManagement.OrderMessaging();
我使用 WPF 应用程序中的以下代码来启动 NServiceBus(selfhost)控制台应用程序:
System.Diagnostics.Process.Start("MyApplication.exe");
谁能提供示例代码,我可以如何从 WPF 应用程序中执行控制台应用程序并访问在控制台应用程序中实例化的静态属性?
更新:我必须补充一点,Bus 对象是通过单独的主机控制台 exe 启动的,同时我还通过此代码单独启动“Message”NServiceBus 控制台:
System.Diagnostics.Process.Start("MyApplication.exe");(这是实例化总线的exe - 这是selfhost服务总线控制台应用程序)
System.Diagnostics.Process.Start("NServiceBus.Host.exe");(这是我的消息对象类在我的 wpf 应用程序中使用的服务主机)
有没有更好的方法在 Visual Studio 之外启动这两个服务,以保持两个托管服务之间共享静态总线属性?
【问题讨论】:
-
拥有另一个进程的原因是什么?您可以直接在 WPF 应用程序中托管 NSB。
标签: c# nservicebus