Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 微事件聚合器_C#_Caliburn.micro_Eventaggregator - Fatal编程技术网

C# 微事件聚合器

C# 微事件聚合器,c#,caliburn.micro,eventaggregator,C#,Caliburn.micro,Eventaggregator,如果这是一个非常愚蠢的问题,请道歉,但我刚刚开始使用caliburn.micro,我正在努力获取eventAggregator,似乎没有订阅任何内容 我不确定问题出在视图模型还是引导程序上。以下是viewmodel: class MainWindowViewModel : Screen { private readonly IEventAggregator _eventAggregator; public MainWindowViewModel(IEventAggregator

如果这是一个非常愚蠢的问题,请道歉,但我刚刚开始使用caliburn.micro,我正在努力获取eventAggregator,似乎没有订阅任何内容

我不确定问题出在视图模型还是引导程序上。以下是viewmodel:

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);
    }
}
class AppBootstrapper:引导程序
{
公共静态只读容器ContainerInstance=new Container();
受保护的覆盖无效配置()
{
ContainerInstance.Register();
ContainerInstance.RegisterSingle();
ContainerInstance.Register();
ContainerInstance.Verify();
}
受保护的重写IEnumerable GetAllInstances(类型服务)
{
返回ContainerInstance.GetAllInstances(服务);
}
受保护的覆盖对象GetInstance(System.Type服务,字符串键)
{
返回ContainerInstance.GetInstance(服务);
}
受保护的覆盖空洞堆积(对象实例)
{
ContainerInstance.InjectProperties(实例);
}
}
如果我想知道我错过了什么,我觉得我一定不是在某个地方链接

我使用SimpleInjector作为IOC容器

编辑:

这似乎是我不知道自己在做什么的一个非常简单的例子。RTFM


实现IHandle确实有效。不过,在第一次处理该类型时,它似乎会被调用两次。我将调查原因。

caliburn micro doc示例显示,订户必须实现IHandle接口。我想这就是问题所在。

听起来你已经找到了某种解决方案

我相信只要您使用和发布兼容的类型实现一个
IHandle
接口,它就会起作用。例如:

class MainWindowViewModel : Screen, IHandle<string>
{ 
    //... Your Code

    public void Handle(string myEventstring)
    {
        // Do Something.
    }
}

我已经在IHandle接口的两个实例中尝试了这一点。我的手和我的手。没有效果。它确实会被调用和断点。虽然我以前确实犯过错误。实现
IHandle
确实有效(尽管第一次调用发布时
Handle
调用了两次),但是
IHandle
什么都不起作用。使用
IHandle
非通用时,您有什么方法签名?我认为它适用于无参数方法。
public sealed class DownloadFinishedEvent
{
    public readonly string EventText = "Download Completed";

    // Additional Download Info Here.

    public override string ToString()
    {
        return this.EventText;
    }
}