라벨이 Event Driven인 게시물 표시

ASPNET 6 Web Api Basic Tutorial 1 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor)

이미지
작성 순서 Create Project Create Controller Add Swagger Add SeriLog Add MediatR Add EntityFramework Core Add Migration Apply Database Add Web Api  Refactoring with Extension Method 1. Create Project Create  2. Create Controller Add NewFolder to project ( Controller ) UserController.cs using Microsoft.AspNetCore.Mvc; namespace WebApiBasicTutorial.Controller { [ApiController] [Route("[controller] ")] public class UserController :ControllerBase { } } Program.cs 에 다음 코드 추가   삭제 ==>  app.MapGet( "/" , () => "Hello World!" ); 추가 ==>  builder.Services.AddControllers(); 3. Add Swagger 개발자 프롬프트에서 프로젝트 폴더로 이동  (현재 .sln 파일이 있는 폴더라면 .csproj 파일이 있는 폴더로 이동) 아래 명령 실행 dotnet add package Swashbuckle.AspNetCore Program.cs 에 다음 코드 추가 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); app.UseSwagger(); app.UseSwaggerUI(); Properties --> launchSettings.json --> "launchUrl": "swagger",...

EF Core Query

이미지
Query (None Transaction) 모든 데이터 로드 using ( var context = new BloggingContext()) { var blogs = context.Blogs.ToList(); } 단일 엔터티 로드 using ( var context = new BloggingContext()) { var blog = context.Blogs .Single(b => b.BlogId == 1 ); } 필터링 using ( var context = new BloggingContext()) { var blogs = context.Blogs .Where(b => b.Url.Contains( "dotnet" )) .ToList(); } 예제) Select all user (모든데이터) Controller 에 다음을 추가 [ProducesResponseType(typeof(List<User>), StatusCodes.Status200OK)] [HttpGet("")] public async Task<IActionResult> GetUsers() { return Ok ( await _mediator.Send( new GetUsers())); } Command folder 에 GetUsers.cs 파일 추가 public class GetUsers : IRequest<List<User>> { } Command folder 에 GetUsersHandler.cs 파일 추가 public class GetUsersHandler : IRequestHandler<GetUsers, List<User>> { private readonly MyDbContext _dbContext; public GetUsersH...

EFcore with Command

이미지
 EF Core 를 통한 Sql 제어 1. Command (Transaction) Add Controller 에 다음을 추가 [ProducesResponseType(typeof(List<User>), StatusCodes.Status200OK)] [HttpPost("")] public async Task<IActionResult> CreateUser( string id, string name, string email) { if (!ModelState.IsValid) return BadRequest (ModelState); var user = new AddUser { Id = id, Name = name, Email = email }; return Ok ( await _mediator.Send(user)); } Command folder 에 AddUser.cs 파일 추가 public class AddUser :IRequest<List<User>> { public string Id { get ; set ; } = string .Empty; public string Name { get ; set ; } = string .Empty; public string Email { get ; set ; } = string .Empty; } CommandHandler folder 에 AddUserHandler.cs 파일 추가 public class AddUserHandler : IRequestHandler<AddUser, List<User>> { private readonly MyDbContext _dbContext; public AddUserHandler (MyDbContext db...

MediatR and ...

이미지
서론 MediatR 을 이용하는 여러가지 방법에 대해 알아보자.  Request/Response IRequest 를 통해 Command 를 생성하고 IRequestHandler <CommandType, OutputType> 을 통해 handler 처리 1 public class Ping : IRequest< string > { } 1 2 3 4 5 6 7 public class PingHandler : IRequestHandler<Ping, string > { public Task< string > Handle(Ping request, CancellationToken cancellationToken) { return Task.FromResult( "Pong" ); } } 1 2 var response = await mediator.Send( new Ping()); Debug.WriteLine(response); // "Pong" 해당 event 전송 방식은 response 가 올때 까지 대기 하는 방식 이다. Response 가 없을 경우에 처리.  1 2 3 4 5 6 7 8 public class OneWay : IRequest { } public class OneWayHandlerWithBaseClass : AsyncRequestHandler<OneWay> { protected override Task Handle(OneWay request, CancellationToken cancellationToken) { // Twiddle thumbs } } Notification INotification 을 통해 Command 를 생성하고 INotificationHandler<Comma...