AWAS é um pacote de geração de código simples e opinativo para ASP.NET construído sobre T4Scaffolding. O AWAS permite que você crie rapidamente os padrões padrão para controladores, serviços e repositórios de API da Web com base em um modelo de entidade fornecido.
GitHub
NuGet
Andaimes T4 (≥ 1.0.8)
Abra a janela do console do gerenciador de pacotes :
Tools > Library Package Manager > Package Manager Console
Execute o seguinte comando:
Install-Package ASP.NET.WebApiScaffolding
Todos os comandos são executados no Package Manager Console após a instalação.
####Para gerar um controlador de API da Web para Student
Scaffold WebApiController Student
* Isso também gerará automaticamente o DbContext e o Service for Student
, para desabilitar tal comportamento use o sinalizador -NoChildItems
.
* O controlador de API da Web e todos os itens filhos gerados são baseados no padrão de camada de serviço; para gerar com base no padrão de repositório, em vez disso, use o sinalizador -Repository
.
####Para gerar um serviço para Student
Scaffold Service Student
* Como acima.
####Para gerar um repositório para Student
Scaffold Repository Student
* Este comando obviamente não possui o sinalizador -Repository
####Sinalizadores opcionais
Bandeiras | Comportamento |
---|---|
-Repository | Mudar para padrão de repositório para padrões gerados |
-NoChildItems | Não gere nenhuma outra dependência automaticamente |
-Force | Substitua o arquivo existente, se existir |
Scaffold WebApiController [-Project] [-CodeLanguage] [-DbContextType] [-Area] [-NoChildItems] [-Repository] [-TemplateFolders] [-Force]
Scaffold Service [-Project] [-CodeLanguage] [-DbContextType] [-Area] [-NoChildItems] [-Repository] [-TemplateFolders] [-Force]
Scaffold Repository [-Project] [-CodeLanguage] [-DbContextType] [-Area] [-NoChildItems] [-TemplateFolders] [-Force]
Scaffold DbContext [-Project] [-CodeLanguage] [-DbContextType] [-Area] [-NoChildItems] [-TemplateFolders] [-Force]
[-optional flag]
Supondo que estejamos trabalhando com um modelo chamado Student
, o AWAS irá gerar padrões baseados no Service Layer Pattern. Para um determinado modelo, a pilha será a seguinte:
Controlador de Aluno |
---|
Serviço Estudantil |
Alternativamente, você pode adicionar o sinalizador -Repository
para gerar Boiletplates com base no Repository Pattern, a pilha será a seguinte:
Controlador de Aluno |
---|
Serviço Estudantil |
Repositório de Alunos |
Project/
...
Controllers/
StudentController.cs
CourseController.cs
...
DataAccessLayer/
ProjectContext.cs
ProjectInitializer.cs
Repositories/
StudentRepository.cs
CourseRepository.cs
...
Services/
StudentService.cs
CourseService.cs
...
...
Como o pacote é construído sobre o T4Scaffolding, podemos aproveitar o CustomScaffolder
e CustomTemplate
que o T4Scaffolding fornece.
####Andaime personalizado O andaime personalizado nos permite criar um andaime de placa de caldeira personalizado para que possamos gerar a mesma placa de caldeira facilmente.
Para gerar uma chamada de scaffolder personalizada Foo
:
Scaffold CustomScaffolder Foo
Será gerada uma pasta:
Project/
...
CodeTemplates/
Scaffolders/
Foo/
Foo.ps1
FooTemplate.cs.t4
...
Agora você pode personalizar Foo.ps1
e FooTemplate.cs.t4
de acordo com suas necessidades. Para usar seu scaffolder personalizado recém-criado, execute:
Scaffold Foo [flags]
####Modelo personalizado Os modelos personalizados nos permitem reutilizar os andaimes existentes que vêm com o T4Scaffolding e o AWAS, mas com um estilo de modelo de sua escolha.
Para gerar um modelo personalizado para WebApiController
:
Scaffold CustomTemplate WebApiController WebApiControllerTemplate
Será gerada uma pasta:
Project/
...
CodeTemplates/
Scaffolders/
WebApiController/
WebApiControllerTemplate.cs.t4
...
Agora você pode personalizar WebApiControllerTemplate.cs.t4
de acordo com suas necessidades. Contanto que o modelo personalizado exista na pasta, o pacote usará seu modelo para todos os scaffolds do WebApiController:
Scaffold WebApiController [flags]
Scaffold CustomTemplate WebApiController WebApiControllerTemplate
Scaffold CustomTemplate Service ServiceWithContextTemplate
Scaffold CustomTemplate Service ServiceWithRepositoryTemplate
Scaffold CustomTemplate Repository RepositoryTemplate
Scaffold CustomTemplate Initializer InitializerTemplate
Scaffold CustomTemplate DbContext DbContextTemplate
Scaffold CustomTemplate DbContext DbContextEntityMemberTemplate
Alguns dos recursos que usei ao longo do caminho...
O tipo 'ObjectContent`1' falhou ao serializar o corpo da resposta para o tipo de conteúdo 'applicationxml; conjunto de caracteres=utf-8'.
Se você estiver recebendo esta mensagem de exceção, adicione o seguinte trecho em App_Start/WebApiConfig.cs
> Register()
, reinicie.
var json = config . Formatters . JsonFormatter ;
json . SerializerSettings . PreserveReferencesHandling = Newtonsoft . Json . PreserveReferencesHandling . Objects ;
config . Formatters . Remove ( config . Formatters . XmlFormatter ) ;
O pacote é inspirado no MvcScaffolding. Pode ser vista como uma API Web, versão assíncrona, mas com alguma perspectiva opinativa em termos de camadas e estruturas de pastas.