I am adding support for strongly typed notifications to
MonoTouch and MonoMac. The idea behind this is to take
guesswork, trips to the documentation and trial and error from
using notifications on iOS and MacOS.

The process is usually: (a) find the right notification;
(b) look up apple docs to see when the notification is posted;
(c) look up each of the keys used to retrieve the data from
the dictionary.

Currently, listening to a notification for a
keyboard-will-be-shown notification looks like this in
MonoTouch:

Currently we map the Objective-C constant
"FooClassNameNotification" into the C# class "Foo" as the member
"NameNotification" of type NSString.

What we want to do is to expose the notifications as
strongly typed C# events. This will provide auto-complete
support in the IDE to produce the lambdas or helper methods,
auto-complete for all the possible properties of the
notification, strong types for the data provided and
live documentation for the values in the notification.

The question is where should these notifications be exposed
in the API? In the example above we do this by the event
"WillShowNotification" on a class "Keyboard" inside the
"NSNotificationCenter". We have a few options for this.

We could host the notification in the class that defines
the notification, but we would have to come up with a naming
scheme to avoid the name clash with the existing NSString constant:

All of these proposals have one potential problem: they
would all assume that all of these interesting notifications
are always posted into the NSNotificationCenter.DefaultCenter.

Apple's documentation does not seem to suggest that any of the
iOS notifications are posted anywhere but the DefaultCenter.
I could not find on GitHub any code that would use anything
but the DefaultCenter.

On MacOS the InstantMessage framework posts notifications
to its own notification center. We could just bind those
events to this specific NSNotificationCenter.