TinyMessenger和Monotouch

时间:2012-05-30 13:29:38

标签: ipad dependency-injection xamarin.ios inversion-of-control eventaggregator

我正在尝试在iPad应用程序中使用TinyMessenger。 iPad应用程序很少有UIViewControllers。我想通过TinyMessenger看到这些控制器之间的通信。我理解这些步骤

第1步 - 创建消息中心[? ]

var messageHub = new TinyMessengerHub();

第2步 - 发布消息[在UIViewController1中]

messageHub.Publish(new MyMessage());

步骤3 - 订阅消息[在UIViewController2中]

messageHub.Subscribe<MyMessage>((m) => { MessageBox.Show("Message Received!"); });

MyMessage定义如下

public class MyMessage : ITinyMessage
{
    /// <summary>
    /// The sender of the message, or null if not supported by the message  implementation.
    /// </summary>
    public object Sender { get; private set; }
}

如果这是使此设置正常工作的正确步骤,请提供建议。而且我不知道我应该在哪里创建messagehub。我相信messagehub必须是全局的,以便任何UIViewController都可以访问它。我可以在AppDelegate中创建messagehub吗?如果在AppDelegate中创建messagehub,如何从UIViewController1访问messagehub?

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您需要将此信使中心与IoC容器结合使用。

您的应用中只需要一个集线器实例,并且使用容器是实现此目的的方法。

请参阅TinyIoC中设置容器的示例(我相信您正在使用它)。你基本上会打电话:

var hub = TinyIoCContainer.Current.Resolve<ITinyMessengerHub>();
//for subscribers
hub.Subscribe<YourMessage>(OnYourMessage);
//for publishers
hub.Publish(new YourMessage(this, "BOOYAH!"));

PS - 如果你真的使用TinyIoC,你可以打开一个#if TINYMESSENGER预处理器指令,为你的应用程序自动注册一个集线器。