Пример #1
0
        internal async Task GenerateViews(RazorPageGeneratorModel razorPageGeneratorModel)
        {
            if (razorPageGeneratorModel == null)
            {
                throw new ArgumentNullException(nameof(razorPageGeneratorModel));
            }

            if (razorPageGeneratorModel.NoPageModel)
            {
                // Throw not supported exception.
                throw new ArgumentException(MessageStrings.PageModelFlagNotSupported);
            }

            IDictionary <string, string> viewAndTemplateNames = new Dictionary <string, string>();

            foreach (string viewTemplate in Views)
            {
                string viewName = viewTemplate == "List" ? "Index" : viewTemplate;
                viewAndTemplateNames.Add(viewName, viewTemplate);
            }

            ModelTypeAndContextModel modelTypeAndContextModel = null;
            string outputPath = ValidateAndGetOutputPath(razorPageGeneratorModel, string.Empty);

            EFValidationUtil.ValidateEFDependencies(_projectContext.PackageDependencies);

            modelTypeAndContextModel = await ModelMetadataUtilities.ValidateModelAndGetEFMetadata(
                razorPageGeneratorModel,
                _entityFrameworkService,
                _modelTypesLocator,
                string.Empty);

            await BaseGenerateViews(viewAndTemplateNames, razorPageGeneratorModel, modelTypeAndContextModel, outputPath);
        }
        public override async Task GenerateCode(ViewGeneratorModel viewGeneratorModel)
        {
            if (viewGeneratorModel == null)
            {
                throw new ArgumentNullException(nameof(viewGeneratorModel));
            }

            if (string.IsNullOrEmpty(viewGeneratorModel.ViewName))
            {
                throw new ArgumentException(MessageStrings.ViewNameRequired);
            }

            if (string.IsNullOrEmpty(viewGeneratorModel.TemplateName))
            {
                throw new ArgumentException(MessageStrings.TemplateNameRequired);
            }

            ModelTypeAndContextModel modelTypeAndContextModel = null;
            var outputPath = ValidateAndGetOutputPath(viewGeneratorModel, outputFileName: viewGeneratorModel.ViewName + Constants.ViewExtension);

            EFValidationUtil.ValidateEFDependencies(_projectContext.PackageDependencies);

            modelTypeAndContextModel = await ModelMetadataUtilities.ValidateModelAndGetEFMetadata(
                viewGeneratorModel,
                _entityFrameworkService,
                _modelTypesLocator,
                string.Empty);

            await GenerateView(viewGeneratorModel, modelTypeAndContextModel, outputPath);

            if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig)
            {
                throw new Exception(string.Format("{0} {1}", MessageStrings.ScaffoldingSuccessful_unregistered, MessageStrings.Scaffolding_additionalSteps));
            }
        }
        public override async Task GenerateCode(RazorPageGeneratorModel razorGeneratorModel)
        {
            if (razorGeneratorModel == null)
            {
                throw new ArgumentNullException(nameof(razorGeneratorModel));
            }

            if (string.IsNullOrEmpty(razorGeneratorModel.RazorPageName))
            {
                throw new ArgumentException(MessageStrings.RazorPageNameRequired);
            }

            if (string.IsNullOrEmpty(razorGeneratorModel.TemplateName))
            {
                throw new ArgumentException(MessageStrings.TemplateNameRequired);
            }

            if (razorGeneratorModel.NoPageModel)
            {
                // Throw not supported exception.
                throw new ArgumentException(MessageStrings.PageModelFlagNotSupported);
            }

            ModelTypeAndContextModel modelTypeAndContextModel = null;
            var outputPath = ValidateAndGetOutputPath(razorGeneratorModel, outputFileName: razorGeneratorModel.RazorPageName + Constants.ViewExtension);

            EFValidationUtil.ValidateEFDependencies(_projectContext.PackageDependencies);

            modelTypeAndContextModel = await ModelMetadataUtilities.ValidateModelAndGetEFMetadata(
                razorGeneratorModel,
                _entityFrameworkService,
                _modelTypesLocator,
                string.Empty);

            var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(_serviceProvider);
            await layoutDependencyInstaller.Execute();

            await GenerateView(razorGeneratorModel, modelTypeAndContextModel, outputPath);

            await layoutDependencyInstaller.InstallDependencies();

            if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig)
            {
                throw new Exception(string.Format("{0} {1}", MessageStrings.ScaffoldingSuccessful_unregistered, MessageStrings.Scaffolding_additionalSteps));
            }
        }
Пример #4
0
        public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel)
        {
            Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass));
            ValidateNameSpaceName(controllerGeneratorModel);
            EFValidationUtil.ValidateEFDependencies(ProjectContext.PackageDependencies, controllerGeneratorModel.UseSqlite);
            string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel);

            _areaName = GetAreaName(ApplicationInfo.ApplicationBasePath, outputPath);

            var modelTypeAndContextModel = await ModelMetadataUtilities.ValidateModelAndGetEFMetadata(
                controllerGeneratorModel,
                EntityFrameworkService,
                ModelTypesLocator,
                _areaName);

            if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName))
            {
                //Todo: Pluralize model name
                controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix;
            }
            var namespaceName = string.IsNullOrEmpty(controllerGeneratorModel.ControllerNamespace)
                ? GetDefaultControllerNamespace(controllerGeneratorModel.RelativeFolderPath)
                : controllerGeneratorModel.ControllerNamespace;
            var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName)
            {
                ControllerName      = controllerGeneratorModel.ControllerName,
                AreaName            = _areaName,
                UseAsync            = controllerGeneratorModel.UseAsync, // This is no longer used for controllers with context.
                ControllerNamespace = namespaceName,
                ModelMetadata       = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata
            };

            await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel);

            Logger.LogMessage(string.Format(MessageStrings.AddedController, outputPath.Substring(ApplicationInfo.ApplicationBasePath.Length)));

            await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName);

            if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig)
            {
                throw new Exception(string.Format("{0} {1}", MessageStrings.ScaffoldingSuccessful_unregistered,
                                                  MessageStrings.Scaffolding_additionalSteps));
            }
        }