代码之家  ›  专栏  ›  技术社区  ›  Hrvoje Hudo

接收mvmlight中派生类型的消息

  •  3
  • Hrvoje Hudo  · 技术社区  · 16 年前

    这个测试不应该通过吗?

    [TestMethod]
    public void derived_message_subscription()
    {
        bool handled = false;
        Messenger.Default.Register<GenericMessage<baseClass>>(this, true, (msg) => handled = true);
        Messenger.Default.Send(new GenericMessage<testClass>(new testClass()));
        Assert.IsTrue(handled);
    }
    
    public abstract class baseClass { }
    public class testClass : baseClass { }
    

    我必须接收从一个基类继承的类的所有消息。mvmlight在register方法中具有bool属性receivederivedmessagestoo,但在我看来它不起作用。

    请注意,当我不使用GenericMessage时,测试通过。它是galasoft mvvm light中的bug还是feature?

    1 回复  |  直到 15 年前
        1
  •  6
  •   Alex B    15 年前

    receiveDerivedMessagesToo 意味着您将收到从您注册的消息类派生的消息。这是可行的:

    public class SpecificMessage : GenericMessage { }

    据我所知,您不能注册到一个泛型类型并接收从此泛型派生的所有类型,因为 GenericMessage<testClass> 不是从 GenericMessage<baseClass> .