private void AddContributedAction(IActionSpecImmutable ca, IObjectSpecImmutable spec)
        {
            var    facet       = ca.GetFacet <IContributedActionFacet>();
            string subMenuName = facet.SubMenuWhenContributedTo(spec);

            if (subMenuName != null)
            {
                string   id      = facet.IdWhenContributedTo(spec);
                MenuImpl subMenu = GetSubMenuIfExists(subMenuName) ?? CreateMenuImmutableAsSubMenu(subMenuName, id);
                subMenu.AddOrderableElementsToMenu(new List <IActionSpecImmutable> {
                    ca
                }, subMenu);
            }
            else
            {
                //i.e. no sub-menu
                AddMenuItem(new MenuAction(ca));
            }
        }
        public ITypedMenu <TObject> AddContributedActions()
        {
            IObjectSpecImmutable spec = GetObjectSpec <TObject>();

            foreach (IActionSpecImmutable ca in spec.ContributedActions)
            {
                var    facet       = ca.GetFacet <IContributedActionFacet>();
                string subMenuName = facet.SubMenuWhenContributedTo(spec);
                if (subMenuName != null)
                {
                    string   id      = facet.IdWhenContributedTo(spec);
                    MenuImpl subMenu = GetSubMenuIfExists(subMenuName) ?? CreateMenuImmutableAsSubMenu(subMenuName, id);
                    subMenu.AddOrderableElementsToMenu(new List <IActionSpecImmutable> {
                        ca
                    }, subMenu);
                }
                else
                {
                    //i.e. no sub-menu
                    AddMenuItem(new MenuAction(ca));
                }
            }
            return(this);
        }