在两个带有事件的 C# 应用程序中使用 IoC 容器
Using IoC container in two C# apps with events
我在 Visual Studio 解决方案中有两个项目,一个是控制台应用程序,另一个是 WPF 应用程序。两者都有一个复合根,其中每个都实例化了一个公共引导程序并注册了一些公共类型。
我正在尝试让控制台应用程序订阅 WPF 应用程序发布的一些事件。当 WPF window 被移动、打开或调整大小时,控制台应用程序会在控制台上打印一个字符串。
Bootstrapper class 位于单独的 class 库中,代码如下:
public class Bootstrapper
{
public void Initialize()
{
var container = IocContainer.Instance.Container;
container.Register<IOrderRepository, SqlOrderRepository>(Lifestyle.Singleton);
container.Register<ILogger, FileLogger>(Lifestyle.Singleton);
container.Register<IEventPublisher, EventPublisher>(Lifestyle.Singleton);
container.Register<CancelOrderHandler>();
container.Register<IViewsIntegrationService, ViewsIntegrationService>(
Lifestyle.Singleton);
try
{
// Verify the container
container.Verify();
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
System.Console.ReadLine();
}
}
}
两个应用程序的复合根中都有此代码:
var bs = new Bootstrapper();
bs.Initialize();
ViewsIntegrationService
触发 WPF 应用程序中的事件。
控制台应用订阅了 ViewsIntegrationService
个事件。
当我 运行 这两个应用程序时,控制台应用程序不接收事件并且控制台上不打印任何内容。
是否因为每个应用程序都使用单独的引导程序实例?因此有两组相同的注册?或者这是因为其他原因而不起作用?
尽管在同一个 Visual Studio 解决方案中有 2 个项目,但在编译时每个项目都是一个单独的 Windows 可执行程序。这两个程序不会自动相互通信。如果需要将信息从一个程序传输到另一个程序,则需要使用某种通信通道,例如 TCP 或 MSMQ。参见 Send/Receive message To/From two running application。
或者,您可以将 "console application" 变成 class 库(当从 WPF 引用时,它将成为同一应用程序的一部分)并使用 WPF window 看起来像一个控制台应用程序window写出信息。
事件和依赖项注入仅影响单个应用程序,因此在跨应用程序边界通信的情况下两者都不相关。
我在 Visual Studio 解决方案中有两个项目,一个是控制台应用程序,另一个是 WPF 应用程序。两者都有一个复合根,其中每个都实例化了一个公共引导程序并注册了一些公共类型。
我正在尝试让控制台应用程序订阅 WPF 应用程序发布的一些事件。当 WPF window 被移动、打开或调整大小时,控制台应用程序会在控制台上打印一个字符串。
Bootstrapper class 位于单独的 class 库中,代码如下:
public class Bootstrapper
{
public void Initialize()
{
var container = IocContainer.Instance.Container;
container.Register<IOrderRepository, SqlOrderRepository>(Lifestyle.Singleton);
container.Register<ILogger, FileLogger>(Lifestyle.Singleton);
container.Register<IEventPublisher, EventPublisher>(Lifestyle.Singleton);
container.Register<CancelOrderHandler>();
container.Register<IViewsIntegrationService, ViewsIntegrationService>(
Lifestyle.Singleton);
try
{
// Verify the container
container.Verify();
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
System.Console.ReadLine();
}
}
}
两个应用程序的复合根中都有此代码:
var bs = new Bootstrapper();
bs.Initialize();
ViewsIntegrationService
触发 WPF 应用程序中的事件。
控制台应用订阅了 ViewsIntegrationService
个事件。
当我 运行 这两个应用程序时,控制台应用程序不接收事件并且控制台上不打印任何内容。
是否因为每个应用程序都使用单独的引导程序实例?因此有两组相同的注册?或者这是因为其他原因而不起作用?
尽管在同一个 Visual Studio 解决方案中有 2 个项目,但在编译时每个项目都是一个单独的 Windows 可执行程序。这两个程序不会自动相互通信。如果需要将信息从一个程序传输到另一个程序,则需要使用某种通信通道,例如 TCP 或 MSMQ。参见 Send/Receive message To/From two running application。
或者,您可以将 "console application" 变成 class 库(当从 WPF 引用时,它将成为同一应用程序的一部分)并使用 WPF window 看起来像一个控制台应用程序window写出信息。
事件和依赖项注入仅影响单个应用程序,因此在跨应用程序边界通信的情况下两者都不相关。