There is a pitfall with this function: If you accidentally use Scene as the go argument, your event will be posted to every listener in the scene.
For example:
protected override void OnParentChanged( GameObject oldParent, GameObject newParent )
{
IParentAssignEvents.PostToGameObject( oldParent, x => x.OnUnassigned( this ) );
IParentAssignEvents.PostToGameObject( newParent, x => x.OnAssigned( this ) );
}
To fix this, just verify that either argument is not the Scene before you send the event:
protected override void OnParentChanged( GameObject oldParent, GameObject newParent )
{
if (oldParent != Scene) IParentAssignEvents.PostToGameObject( oldParent, x => x.OnUnassigned( this ) );
if (newParent != Scene) IParentAssignEvents.PostToGameObject( newParent, x => x.OnAssigned( this ) );
}