如果这是一个非常愚蠢的问题,我很抱歉,但我刚刚开始使用caliburn.micro,我正在努力获得eventAggregator,似乎没有什么订阅……
我不确定问题出在视图模型还是引导程序上。这是视图模型:
class MainWindowViewModel : Screen
{
private readonly IEventAggregator _eventAggregator;
public MainWindowViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
public void SayHello()
{
_eventAggregator.Publish("Hello World!");
}
public void Handle(string message)
{
MessageBox.Show(message);
}
}引导程序:
class AppBootstrapper : Bootstrapper<MainWindowViewModel>
{
public static readonly Container ContainerInstance = new Container();
protected override void Configure()
{
ContainerInstance.Register<IWindowManager, WindowManager>();
ContainerInstance.RegisterSingle<IEventAggregator,EventAggregator>();
ContainerInstance.Register<MainWindowViewModel, MainWindowViewModel>();
ContainerInstance.Verify();
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return ContainerInstance.GetAllInstances(service);
}
protected override object GetInstance(System.Type service, string key)
{
return ContainerInstance.GetInstance(service);
}
protected override void BuildUp(object instance)
{
ContainerInstance.InjectProperties(instance);
}
}任何想法我错过了什么,我觉得我一定没有链接到某个地方...
我使用SimpleInjector作为IOC容器
编辑:
这似乎是一个非常简单的例子,我不知道我在做什么。RTFM。
实现IHandle是可行的。但它似乎在第一次处理该类型时被调用了两次。我会做一些调查来找出原因。
发布于 2014-01-25 07:50:08
听起来你已经找到了某种解决方案。
我相信只要您使用与您正在发布的兼容的类型实现一个IHandle<T>接口,它就应该可以工作。例如:
class MainWindowViewModel : Screen, IHandle<string>
{
//... Your Code
public void Handle(string myEventstring)
{
// Do Something.
}
}如果有帮助的话,当我使用EventAggregator时,我倾向于创建一个静态EventAggregator实例(从一个小的助手类),我在任何需要它的ViewModels中使用它-它可能会在你实际上意外地多次初始化EventAggregator的情况下(可能是双重事件的原因)提供帮助。
我有时也会创建一些小的辅助类来包装事件信息。例如:
public sealed class DownloadFinishedEvent
{
public readonly string EventText = "Download Completed";
// Additional Download Info Here.
public override string ToString()
{
return this.EventText;
}
}发布于 2014-01-24 22:58:56
caliburn微文档示例表明,订阅者必须实现IHandle接口。我认为这就是问题所在。
https://stackoverflow.com/questions/21335663
复制相似问题