我有一个硬件模块,可以通过用户和另一个模块从View进行交互 .
Question:
我应该在MyModule_A中创建一个单例实例,将此实例注册到我的容器中并使用此容器来解析MyModule_B中的实例吗?
Or
我必须在两个模块之间使用Eventaggregator进行两次通信吗?
在这种情况下,棱镜文档对我来说并不清楚 .
-
解决方案指挥 . 在期望用户交互立即采取行动时使用 .
-
地区背景 . 使用此选项可在主机区域中的主机和视图之间提供上下文信息 . 这种方法有点类似于DataContext,但它不依赖于它 .
-
共享服务 . 呼叫者可以在服务上调用一种方法,该方法将事件引发给消息的接收者 . 如果以上都不适用,请使用此选项 .
-
事件聚合 . 用于在没有直接的动作反应期望的情况下跨视图模型,演示者或控制器进行通信 .
public class MyModule_A : IModule
{IRegionManager _regionManager;私人IUnityContainer _container;私人ILoggerFacade _logger;
public MyModule(IRegionManager regionManager, IUnityContainer container)
{
regionManager = regionManager;
_container = container;
}
public void Initialize()
{
_unityContainer.RegisterType<IMyHardware, MyHardware>(new Containercontrolledlifetime);
}
}
public class MyModule_AViewModel:BindableBase {private string _title =“MyModule_A”; private readonly IRegionManager _regionManager; private readonly IUnityContainer _unityContainer; private readonly IUnityContainer _unityContainer; private readonly ILoggerFacade _logger;私人IMyHardware _myhardware;
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public MyModuleViewModel(IRegionManager regionManager, IUnityContainer unityContainer)
{
_unityContainer = unityContainer;
_logger = unityContainer.Resolve<ILoggerFacade>();
_myhardware = unityContainer.Resolve<IMyHardware>();
_logger.Log("ViewModel created", Category.Debug, Priority.Medium);
}
public class MyModule_B : IModule
{
IRegionManager _regionManager;
private IUnityContainer _container;
private ILoggerFacade _logger;
private IHardware _myhardware;
public MyModule(IRegionManager regionManager, IUnityContainer container)
{
regionManager = regionManager;
_container = container;
}
public void Initialize()
{
}
}
public class MyModule_BViewModel : BindableBase
{
private string _title = "MyModule_B";
private readonly IRegionManager _regionManager;
private readonly IUnityContainer _unityContainer;
private readonly ILoggerFacade _logger;
private IMyHardware _myhardware;
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public MyModule_BViewModel(IRegionManager regionManager, unityContainer unityContainer)
{
_unityContainer = unityContainer;
_logger = unityContainer.Resolve<ILoggerFacade>();
_myhardware = unityContainer.Resolve<IMyHardware>();
_logger.Log("ViewModel created", Category.Debug,Priority.Medium);
}
}
1 回答
使用共享服务,即:
在模块a和模块b引用的第三个程序集(而不是模块)中为驱动程序创建接口 . 然后在模块a中注册驱动程序,并将其注入视图模型或模块b或c中的任何内容,甚至是a .
草图: