public override void Scaffold(IObjectDefinition objectDefinition, string outputDirectory, string subdirectory = "") { var codeBuilder = default(ICodeBuilder); var selection = objectDefinition.DbObject == null?this.GlobalSelection() : this.GetSelection(objectDefinition.DbObject); if (objectDefinition is CSharpClassDefinition) { codeBuilder = new CSharpClassBuilder { OutputDirectory = outputDirectory, ForceOverwrite = selection.Settings.ForceOverwrite, ObjectDefinition = objectDefinition }; } else if (objectDefinition is CSharpInterfaceDefinition) { codeBuilder = new CSharpInterfaceBuilder { OutputDirectory = outputDirectory, ForceOverwrite = selection.Settings.ForceOverwrite, ObjectDefinition = objectDefinition }; } OnScaffoldingDefinition(new ScaffoldingDefinitionEventArgs(Logger, codeBuilder)); codeBuilder.CreateFile(subdirectory: subdirectory); OnScaffoldedDefinition(new ScaffoldedDefinitionEventArgs(Logger, codeBuilder)); }
internal static void ScaffoldRequestsExtensions(this AspNetCoreProject project) { foreach (var table in project.Database.Tables) { var classDefinition = project.GetRequestExtensionsClassDefinition(table); CSharpClassBuilder.CreateFiles(project.OutputDirectory, project.AspNetCoreProjectNamespaces.Requests, project.GlobalSelection().Settings.ForceOverwrite, classDefinition); } }
public static AspNetCoreProject ScaffoldAspNetCore(this AspNetCoreProject aspNetCoreProject) { aspNetCoreProject.ScaffoldResponses(); aspNetCoreProject.ScaffoldResponsesExtensions(); aspNetCoreProject.ScaffoldRequests(); aspNetCoreProject.ScaffoldRequestsExtensions(); aspNetCoreProject.ScaffoldReadMe(); foreach (var feature in aspNetCoreProject.Features) { CSharpClassBuilder.CreateFiles(aspNetCoreProject.OutputDirectory, aspNetCoreProject.AspNetCoreProjectNamespaces.Controllers, aspNetCoreProject.GlobalSelection().Settings.ForceOverwrite, feature.GetControllerClassDefinition()); } return(aspNetCoreProject); }
public static AspNetCoreProject ScaffoldAspNetCore(this EntityFrameworkCoreProject entityFrameworkProject, string name, string outputDirectory, Database database) { var aspNetCoreProject = new AspNetCoreProject { Name = name, OutputDirectory = outputDirectory, Database = database }; aspNetCoreProject.BuildFeatures(); foreach (var selection in entityFrameworkProject.Selections) { aspNetCoreProject.Selections.Add(new ProjectSelection <AspNetCoreProjectSettings> { Pattern = selection.Pattern, Settings = new AspNetCoreProjectSettings { ForceOverwrite = selection.Settings.ForceOverwrite, UseLogger = true, ConcurrencyToken = selection.Settings.ConcurrencyToken, AuditEntity = selection.Settings.AuditEntity == null ? null : new AuditEntity { CreationUserColumnName = selection.Settings.AuditEntity.CreationUserColumnName, CreationDateTimeColumnName = selection.Settings.AuditEntity.CreationDateTimeColumnName, LastUpdateUserColumnName = selection.Settings.AuditEntity.LastUpdateUserColumnName, LastUpdateDateTimeColumnName = selection.Settings.AuditEntity.LastUpdateDateTimeColumnName }, EntitiesWithDataContracts = selection.Settings.EntitiesWithDataContracts } }); } aspNetCoreProject.ScaffoldResponses(); aspNetCoreProject.ScaffoldResponsesExtensions(); aspNetCoreProject.ScaffoldRequestModels(); aspNetCoreProject.ScaffoldRequestModelsExtensions(); aspNetCoreProject.ScaffoldReadMe(); foreach (var feature in aspNetCoreProject.Features) { CSharpClassBuilder.CreateFiles(aspNetCoreProject.OutputDirectory, "Controllers", aspNetCoreProject.GlobalSelection().Settings.ForceOverwrite, feature.GetControllerClassDefinition()); } return(aspNetCoreProject); }
internal static void ScaffoldResponses(this AspNetCoreProject project) { var globalSelection = project.GlobalSelection(); CSharpInterfaceBuilder.CreateFiles(project.OutputDirectory, "Responses", globalSelection.Settings.ForceOverwrite, project.GetResponseInterfaceDefinition(), project.GetSingleResponseInterfaceDefinition(), project.GetListResponseInterfaceDefinition(), project.GetPagedResponseInterfaceDefinition() ); CSharpClassBuilder.CreateFiles(project.OutputDirectory, "Responses", globalSelection.Settings.ForceOverwrite, project.GetSingleResponseClassDefinition(), project.GetListResponseClassDefinition(), project.GetPagedResponseClassDefinition() ); }
public void ScaffoldingRepositoryClass() { // Arrange var definition = new CSharpClassDefinition { Namespaces = { "System", "System.Linq", "Microsoft.EntityFrameworkCore" }, Namespace = "DesignPatterns", AccessModifier = AccessModifier.Public, Name = "NorthwindRepository", BaseClass = "Repository", Implements = { "INorthwindRepository" }, Constructors = { new ClassConstructorDefinition(AccessModifier.Public, new ParameterDefinition("NorthwindDbContext", "dbContext")) { Invocation = "base(dbContext)" } } }; definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Product>", "GetProducts") { Parameters = { new ParameterDefinition("int?", "supplierID") }, Lines = { new CodeLine("var query = DbContext.Products.AsQueryable();"), new CodeLine(), new CodeLine("if (supplierID.HasValue)"), new CodeLine(1, "query = query.Where(item => item.SupplierID == supplierID);"), new CodeLine(), new ReturnLine("query;") } }); definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Shipper>", "GetShippers") { Lines = { new ReturnLine("DbContext.Shippers;") } }); definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Order>", "GetOrders") { Lines = { new ReturnLine("DbContext.Orders;") } }); // Act var codeBuilder = new CSharpClassBuilder { OutputDirectory = @"C:\Temp\CatFactory.NetCore\DesignPatterns", ForceOverwrite = true, ObjectDefinition = definition, AddNamespacesAtStart = false }; codeBuilder.CreateFile(); }
public void ScaffoldingDbContextExtensionClass() { // Arrange var definition = new CSharpClassDefinition { Namespaces = { "System", "System.Collections.Generic", "System.Data.SqlClient", "System.Linq", "System.Threading.Tasks", "Microsoft.EntityFrameworkCore" }, Namespace = "DesignPatterns", AccessModifier = AccessModifier.Public, IsPartial = true, IsStatic = true, Name = "NorthwindDbContextExtensions", Methods = { new MethodDefinition(AccessModifier.Public, "IQueryable<Product>", "GetProducts") { IsStatic = true, IsExtension = true, Parameters = { new ParameterDefinition("NorthwindDbContext", "dbContext"), new ParameterDefinition("int?", "supplierID") }, Lines = { new CodeLine("var query = dbContext.Products.AsQueryable();"), new CodeLine(), new CodeLine("if (supplierID.HasValue)"), new CodeLine(1, "query = query.Where(item => item.SupplierID == supplierID);"), new CodeLine(), new ReturnLine("query;") } }, new MethodDefinition(AccessModifier.Public, "Task<List<CustOrderHist>>", "GetCustOrderHistAsync") { IsStatic = true, IsAsync = true, IsExtension = true, Parameters = { new ParameterDefinition("NorthwindDbContext", "dbContext"), new ParameterDefinition("string", "customerID") }, Lines = { new CodeLine("var query = new"), new CodeLine("{"), new CodeLine(1, "Text = \" exec [dbo].[CustOrderHist] @CustomerID \","), new CodeLine(1, "Parameters = new[]"), new CodeLine(1, "{"), new CodeLine(2, "new SqlParameter(\"@CustomerID\", customerID)"), new CodeLine(1, "}"), new CodeLine("};"), new CodeLine(), new ReturnLine("await dbContext"), new CodeLine(1, ".Query<CustOrderHist>()"), new CodeLine(1, ".FromSql(query.Text, query.Parameters)"), new CodeLine(1, ".ToListAsync();") } } } }; // Act var codeBuilder = new CSharpClassBuilder { OutputDirectory = @"C:\Temp\CatFactory.NetCore\DesignPatterns", ForceOverwrite = true, ObjectDefinition = definition, AddNamespacesAtStart = false }; codeBuilder.CreateFile(); }
internal static void ScaffoldResponsesExtensions(this AspNetCoreProject project) { CSharpClassBuilder.CreateFiles(project.OutputDirectory, project.AspNetCoreProjectNamespaces.Responses, project.GlobalSelection().Settings.ForceOverwrite, project.GetResponsesExtensionsClassDefinition()); }
public void TestController() { // Arrange var definition = new CSharpClassDefinition { Namespace = "Controllers", Name = "SalesController", BaseClass = "Controller", Attributes = new List <MetadataAttribute> { new MetadataAttribute("Route", "\"api/[controller]\"") } }; definition.Namespaces.Add("System"); definition.Namespaces.Add("System.Threading.Tasks"); definition.Namespaces.Add("Microsoft.AspNetCore.Mvc"); definition.Fields.Add(new FieldDefinition(AccessModifier.Protected, "ISalesRepository", "Repository") { IsReadOnly = true }); definition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition("ISalesRepository", "repository")) { Lines = new List <ILine> { new CodeLine("Repository = repository;") } }); definition.Methods.Add(new MethodDefinition(AccessModifier.Protected, "void", "Disposed", new ParameterDefinition("Boolean", "disposing")) { IsOverride = true, Lines = new List <ILine> { new CodeLine("Repository?.Dispose();"), new CodeLine(), new CodeLine("base.Dispose(disposing);") } }); definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "GetOrdersAsync", new ParameterDefinition("Int32?", "pageSize", "10"), new ParameterDefinition("Int32?", "pageNumber", "1")) { Attributes = new List <MetadataAttribute> { new MetadataAttribute("HttpGet", "\"Order\"") }, IsAsync = true }); definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "GetOrderAsync", new ParameterDefinition("Int32", "id")) { Attributes = new List <MetadataAttribute> { new MetadataAttribute("HttpGet", "\"Order/{id}\"") }, IsAsync = true }); definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "CreateOrderAsync", new ParameterDefinition("OrderViewModel", "value", new MetadataAttribute("FromBody"))) { Attributes = new List <MetadataAttribute> { new MetadataAttribute("HttpPost", "\"Order\"") }, IsAsync = true }); definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "UpdateOrderAsync", new ParameterDefinition("Int32", "id"), new ParameterDefinition("OrderViewModel", "value", new MetadataAttribute("FromBody"))) { Attributes = new List <MetadataAttribute> { new MetadataAttribute("HttpPut", "\"Order/{id}\"") }, IsAsync = true }); definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "DeleteOrderAsync", new ParameterDefinition("Int32", "id")) { Attributes = new List <MetadataAttribute> { new MetadataAttribute("HttpDelete", "\"Order/{id}\"") }, IsAsync = true }); // Act var builder = new CSharpClassBuilder { ObjectDefinition = definition, OutputDirectory = "C:\\Temp\\CatFactory.DotNetCore", ForceOverwrite = true }; builder.CreateFile(); }
internal static void ScaffoldRequestModelsExtensions(this AspNetCoreProject project) { var classDefinition = project.GetRequestModelExtensionsClassDefinition(); CSharpClassBuilder.CreateFiles(project.OutputDirectory, "RequestModels", project.GlobalSelection().Settings.ForceOverwrite, classDefinition); }