private async Task GenerateController(ControllerGeneratorModel controllerGeneratorModel, ModelType model, ModelType dataContext, string controllerNameSpace, MvcLayoutDependencyInstaller layoutDependencyInstaller) { if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = model.Name + Constants.ControllerSuffix; } // Validation successful Contract.Assert(model != null, "Validation succeded but model type not set"); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var dbContextFullName = dataContext != null ? dataContext.FullName : controllerGeneratorModel.DataContextClass; var modelTypeFullName = model.FullName; var modelMetadata = await _entityFrameworkService.GetModelMetadata( dbContextFullName, model); await layoutDependencyInstaller.Execute(); var templateName = "ControllerWithContext.cshtml"; var templateModel = new ControllerGeneratorTemplateModel(model, dbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = controllerNameSpace, ModelMetadata = modelMetadata }; var appBasePath = _applicationEnvironment.ApplicationBasePath; await _codeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); _logger.LogMessage("Added Controller : " + outputPath.Substring(appBasePath.Length)); if (!controllerGeneratorModel.NoViews) { foreach (var viewTemplate in _views) { var viewName = viewTemplate == "List" ? "Index" : viewTemplate; // ToDo: This is duplicated from ViewGenerator. bool isLayoutSelected = controllerGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(controllerGeneratorModel.LayoutPage); var viewTemplateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeFullName, ViewDataTypeShortName = model.Name, ViewName = viewName, LayoutPageFile = controllerGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = false, ReferenceScriptLibraries = controllerGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelMetadata, JQueryVersion = "1.10.2" }; var viewOutputPath = Path.Combine( appBasePath, Constants.ViewsFolderName, templateModel.ControllerRootName, viewName + Constants.ViewExtension); await _codeGeneratorActionsService.AddFileFromTemplateAsync(viewOutputPath, viewTemplate + Constants.RazorTemplateExtension, TemplateFolders, viewTemplateModel); _logger.LogMessage("Added View : " + viewOutputPath.Substring(appBasePath.Length)); } } }
private async Task GenerateController(ControllerGeneratorModel controllerGeneratorModel, ITypeSymbol model, ITypeSymbol dataContext, string controllerNameSpace, MvcLayoutDependencyInstaller layoutDependencyInstaller) { if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = model.Name + Constants.ControllerSuffix; } // Validation successful Contract.Assert(model != null, "Validation succeded but model type not set"); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var dbContextFullName = dataContext != null?dataContext.ToDisplayString() : controllerGeneratorModel.DataContextClass; var modelTypeFullName = model.ToDisplayString(); var modelMetadata = await _entityFrameworkService.GetModelMetadata( dbContextFullName, model); await layoutDependencyInstaller.Execute(); var templateName = "ControllerWithContext.cshtml"; var templateModel = new ControllerGeneratorTemplateModel(model, dbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = controllerNameSpace, ModelMetadata = modelMetadata }; var appBasePath = _applicationEnvironment.ApplicationBasePath; await _codeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); _logger.LogMessage("Added Controller : " + outputPath.Substring(appBasePath.Length)); if (!controllerGeneratorModel.NoViews) { foreach (var viewTemplate in _views) { var viewName = viewTemplate == "List" ? "Index" : viewTemplate; // ToDo: This is duplicated from ViewGenerator. bool isLayoutSelected = controllerGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(controllerGeneratorModel.LayoutPage); var viewTemplateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeFullName, ViewDataTypeShortName = model.Name, ViewName = viewName, LayoutPageFile = controllerGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = false, ReferenceScriptLibraries = controllerGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelMetadata, JQueryVersion = "1.10.2" }; var viewOutputPath = Path.Combine( appBasePath, Constants.ViewsFolderName, templateModel.ControllerRootName, viewName + Constants.ViewExtension); await _codeGeneratorActionsService.AddFileFromTemplateAsync(viewOutputPath, viewTemplate + Constants.RazorTemplateExtension, TemplateFolders, viewTemplateModel); _logger.LogMessage("Added View : " + viewOutputPath.Substring(appBasePath.Length)); } } }