public static void RegisterAllAreas(Assembly[] assemblies)
        {
            if (assemblies == null)
            {
                throw new ArgumentNullException(nameof(assemblies));
            }

            AreaRegistration.RegisterAllAreas();

            IEnumerable <Type> areas = TypeAttributeHelper.GetTypesChildOf <AreaRegistration>(assemblies);

            foreach (Type area in areas)
            {
                AreaRegistration areaRegistration = AreaTable.AddArea(area);

                string ns = area.Namespace;
                if (string.IsNullOrEmpty(ns))
                {
                    continue;
                }

                IEnumerable <Type> controllersInArea = TypeAttributeHelper.GetTypesChildOf <Controller>(assemblies)
                                                       .Where(t => t.Namespace != null && t.Namespace.StartsWith(ns, StringComparison.OrdinalIgnoreCase));
                controllersInArea.ToList()
                .ForEach(t => AreaTable.RegisterController(t.FullName, areaRegistration.AreaName));
            }
        }