public async Task GenerateCode(XbAreaGeneratorModel genModel) { // When multiple this NuGet packages are installed, // depending on the situation, older versions may be used. var version = this.GetType().GetTypeInfo().Assembly.GetName().Version.ToString(); this._logger.LogMessage($"Generator version: {version}"); this._logger.LogMessage($"Area name: {genModel.AreaName}"); if (genModel == null) { throw new ArgumentNullException(nameof(genModel)); } if (string.IsNullOrEmpty(genModel.AreaName)) { throw new ArgumentException(MessageStrings.AreaNameRequired); } this.EnsureFolderLayout(genModel); var readmeGenerator = ActivatorUtilities.CreateInstance <ReadMeGenerator>(this._serviceProvider); try { await readmeGenerator.GenerateReadmeForArea(); } catch (Exception ex) { _logger.LogMessage($"Failed to generate a readme: {ex.Message}"); throw ex.Unwrap(_logger); } }
/// <summary> /// Creates a folder hierarchy: /// ProjectDir /// \ Areas /// \ AreaName /// \ Controllers /// \ Models /// \ ViewModels /// \ Views /// </summary> private void EnsureFolderLayout(XbAreaGeneratorModel model) { var areaBasePath = Path.Combine(_appInfo.ApplicationBasePath, "Areas"); if (!Directory.Exists(areaBasePath)) { Directory.CreateDirectory(areaBasePath); } var areaPath = Path.Combine(areaBasePath, model.AreaName); if (!Directory.Exists(areaPath)) { Directory.CreateDirectory(areaPath); } foreach (var areaFolder in AreaFolders) { var path = Path.Combine(areaPath, areaFolder); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } if (areaFolder == "Models") { foreach (var subFolder in ModelSubFolders) { var subPath = Path.Combine(areaPath, areaFolder, subFolder); if (!Directory.Exists(subPath)) { Directory.CreateDirectory(subPath); } } } } }