public MainWindowViewModel()
        {
            // create logger
            _logger = new Logger.Logger();

            // load modules
            _logger.Info(this, "Load modules");
            _compositionHelper = new CompositionHelper <IModuleContract>();
            _compositionHelper.AssembleModuleComponents();

            // core menu
            var coreMenu = new List <IMenuCommand> {
                new File(), new Help()
            };

            // generate full menu (core + modules)
            MainMenuViewModel = new MainMenuViewModel(coreMenu, Modules);

            // generate a renderer
            RendererViewModel = new RendererViewModel();
        }
        public static Menu.Core.Menu CreateMenu(IEnumerable <IMenuCommand> coreCommands, IEnumerable <Lazy <IModuleContract> > modules)
        {
            var menuCompositionHelper = new CompositionHelper <IModuleCommand, IMenuGroupItemAttribute>();

            menuCompositionHelper.AssembleModuleComponents(modules);

            var menu = new Menu.Core.Menu();

            foreach (var coreCommand in coreCommands)
            {
                menu.Parse(coreCommand.GetType().GetAttributeValue((MenuGroupItemAttribute attribute) => attribute.Items), coreCommand);
            }
            foreach (var moduleCommand in menuCompositionHelper.Modules)
            {
                menu.Parse(moduleCommand.Metadata.Items, moduleCommand.Value);
            }
            menu.AddSeparators();
            menu.ActivateParents();

            return(menu);
        }