public async Task GenerateCode(ViewGeneratorModel viewGeneratorModel) { if (viewGeneratorModel == null) { throw new ArgumentNullException(nameof(viewGeneratorModel)); } if (string.IsNullOrEmpty(viewGeneratorModel.ViewName)) { throw new ArgumentException(CodeGenerators.Mvc.MessageStrings.ViewNameRequired); } if (string.IsNullOrEmpty(viewGeneratorModel.TemplateName)) { throw new ArgumentException(CodeGenerators.Mvc.MessageStrings.TemplateNameRequired); } var outputPath = ValidateAndGetOutputPath(viewGeneratorModel, outputFileName: viewGeneratorModel.ViewName + Constants.ViewExtension); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(viewGeneratorModel); var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(_serviceProvider); await layoutDependencyInstaller.Execute(); if (viewGeneratorModel.ViewName.EndsWith(Constants.ViewExtension, StringComparison.OrdinalIgnoreCase)) { int viewNameLength = viewGeneratorModel.ViewName.Length - Constants.ViewExtension.Length; viewGeneratorModel.ViewName = viewGeneratorModel.ViewName.Substring(0, viewNameLength); } bool isLayoutSelected = !viewGeneratorModel.PartialView && (viewGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(viewGeneratorModel.LayoutPage)); var templateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeAndContextModel.ModelType.FullName, ViewDataTypeShortName = modelTypeAndContextModel.ModelType.Name, ViewName = viewGeneratorModel.ViewName, LayoutPageFile = viewGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = viewGeneratorModel.PartialView, ReferenceScriptLibraries = viewGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata, JQueryVersion = "1.10.2" //Todo }; var templateName = viewGeneratorModel.TemplateName + Constants.RazorTemplateExtension; await _codeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); _logger.LogMessage("Added View : " + outputPath.Substring(ApplicationInfo.ApplicationBasePath.Length)); await layoutDependencyInstaller.InstallDependencies(); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception(string.Format("{0} {1}", CodeGenerators.Mvc.MessageStrings.ScaffoldingSuccessful_unregistered, CodeGenerators.Mvc.MessageStrings.Scaffolding_additionalSteps)); } }
public async Task GenerateCode([NotNull] ViewGeneratorModel viewGeneratorModel) { if (string.IsNullOrEmpty(viewGeneratorModel.ViewName)) { throw new ArgumentException("The ViewName cannot be empty"); } if (string.IsNullOrEmpty(viewGeneratorModel.TemplateName)) { throw new ArgumentException("The TemplateName cannot be empty"); } var outputPath = ValidateAndGetOutputPath(viewGeneratorModel, outputFileName: viewGeneratorModel.ViewName + Constants.ViewExtension); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(viewGeneratorModel); var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(_serviceProvider); await layoutDependencyInstaller.Execute(); if (viewGeneratorModel.ViewName.EndsWith(Constants.ViewExtension, StringComparison.OrdinalIgnoreCase)) { int viewNameLength = viewGeneratorModel.ViewName.Length - Constants.ViewExtension.Length; viewGeneratorModel.ViewName = viewGeneratorModel.ViewName.Substring(0, viewNameLength); } bool isLayoutSelected = !viewGeneratorModel.PartialView && (viewGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(viewGeneratorModel.LayoutPage)); var templateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeAndContextModel.ModelType.FullName, ViewDataTypeShortName = modelTypeAndContextModel.ModelType.Name, ViewName = viewGeneratorModel.ViewName, LayoutPageFile = viewGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = viewGeneratorModel.PartialView, ReferenceScriptLibraries = viewGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata, JQueryVersion = "1.10.2" //Todo }; var templateName = viewGeneratorModel.TemplateName + Constants.RazorTemplateExtension; await _codeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); _logger.LogMessage("Added View : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await layoutDependencyInstaller.InstallDependencies(); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception("Scaffolding generated all the code but the new context created could be registered using dependency injection." + "There may be additional steps required for the generated code to work. Refer to <forward-link>"); } }
public async Task GenerateCode(ViewGeneratorModel viewGeneratorModel) { if (viewGeneratorModel == null) { throw new ArgumentNullException(nameof(viewGeneratorModel)); } if (string.IsNullOrEmpty(viewGeneratorModel.ViewName)) { throw new ArgumentException(CodeGenerators.Mvc.MessageStrings.ViewNameRequired); } if (string.IsNullOrEmpty(viewGeneratorModel.TemplateName)) { throw new ArgumentException(CodeGenerators.Mvc.MessageStrings.TemplateNameRequired); } var outputPath = ValidateAndGetOutputPath(viewGeneratorModel, outputFileName: viewGeneratorModel.ViewName + Constants.ViewExtension); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(viewGeneratorModel); var layoutDependencyInstaller = ActivatorUtilities.CreateInstance<MvcLayoutDependencyInstaller>(_serviceProvider); await layoutDependencyInstaller.Execute(); if (viewGeneratorModel.ViewName.EndsWith(Constants.ViewExtension, StringComparison.OrdinalIgnoreCase)) { int viewNameLength = viewGeneratorModel.ViewName.Length - Constants.ViewExtension.Length; viewGeneratorModel.ViewName = viewGeneratorModel.ViewName.Substring(0, viewNameLength); } bool isLayoutSelected = !viewGeneratorModel.PartialView && (viewGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(viewGeneratorModel.LayoutPage)); var templateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeAndContextModel.ModelType.FullName, ViewDataTypeShortName = modelTypeAndContextModel.ModelType.Name, ViewName = viewGeneratorModel.ViewName, LayoutPageFile = viewGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = viewGeneratorModel.PartialView, ReferenceScriptLibraries = viewGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata, JQueryVersion = "1.10.2" //Todo }; var templateName = viewGeneratorModel.TemplateName + Constants.RazorTemplateExtension; await _codeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); _logger.LogMessage("Added View : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await layoutDependencyInstaller.InstallDependencies(); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception(string.Format("{0} {1}", CodeGenerators.Mvc.MessageStrings.ScaffoldingSuccessful_unregistered, CodeGenerators.Mvc.MessageStrings.Scaffolding_additionalSteps)); } }