Skip to content

Commit efdbda3

Browse files
some refactoring and cleaning up codes.
1 parent ff5a0e8 commit efdbda3

File tree

4 files changed

+27
-40
lines changed

4 files changed

+27
-40
lines changed

src/Web/Api/Controllers/v1/BaseControllerV1.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,31 @@
44
using AutoMapper;
55
using MediatR;
66
using Microsoft.AspNetCore.Mvc;
7+
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Logging;
9+
using System;
810

911
[ValidateModelState]
1012
[Route("api/v{version:apiVersion}/[controller]")]
1113
public class BaseControllerV1 : ControllerBase
1214
{
13-
internal readonly IMediator _mediator;
14-
internal readonly IMapper _mapper;
15-
internal readonly ILogger _logger;
15+
protected IServiceProvider Resolver
16+
{
17+
get
18+
{
19+
return HttpContext.RequestServices;
20+
}
21+
}
1622

17-
protected BaseControllerV1(ILogger logger,
18-
IMediator mediator,
19-
IMapper mapper)
23+
protected T GetService<T>()
2024
{
21-
_logger = logger ?? throw new System.ArgumentNullException(nameof(logger));
22-
_mediator = mediator ?? throw new System.ArgumentNullException(nameof(mediator));
23-
_mapper = mapper ?? throw new System.ArgumentNullException(nameof(mapper));
25+
return Resolver.GetService<T>();
2426
}
27+
28+
protected IMapper Mapper => GetService<IMapper>();
29+
30+
protected IMediator Mediator => GetService<IMediator>();
31+
32+
protected ILogger Logger => GetService<ILogger>();
2533
}
2634
}

src/Web/Api/Controllers/v1/Products/ProductController.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,21 @@ namespace CleanTemplate.Api.Controllers.v1.Products
1515
[ApiVersion("1")]
1616
public class ProductController : BaseControllerV1
1717
{
18-
public ProductController(ILogger<ProductController> logger,
19-
IMediator mediator,
20-
IMapper mapper)
21-
: base(logger, mediator, mapper)
22-
{ }
23-
2418
[HttpGet]
2519
[SwaggerOperation("get a product by id")]
2620
public async Task<ApiResult<ProductQueryModel>> GetByIdAsync([FromQuery] int productId)
2721
{
28-
var result = await _mediator.Send(new GetProductByIdQuery() { ProductId = productId });
22+
var result = await Mediator.Send(new GetProductByIdQuery() { ProductId = productId });
2923
return new ApiResult<ProductQueryModel>(result);
3024
}
3125

3226
[HttpPost]
3327
[SwaggerOperation("add a product")]
3428
public async Task<ApiResult<int>> AddAsync(AddProductRequest request)
3529
{
36-
var command = _mapper.Map<AddProductRequest, AddProductCommand>(request);
30+
var command = Mapper.Map<AddProductRequest, AddProductCommand>(request);
3731

38-
var result = await _mediator.Send(command);
32+
var result = await Mediator.Send(command);
3933

4034
return new ApiResult<int>(result);
4135
}
@@ -44,7 +38,7 @@ public async Task<ApiResult<int>> AddAsync(AddProductRequest request)
4438
[SwaggerOperation("get a product from cache. this is a example for how to use cache")]
4539
public async Task<ApiResult<ReadProductFromRedisResponse>> ReadFromCacheAsync([FromQuery] int productId)
4640
{
47-
var result = await _mediator.Send(new ReadProductFromRedisQuery(productId));
41+
var result = await Mediator.Send(new ReadProductFromRedisQuery(productId));
4842
return new ApiResult<ReadProductFromRedisResponse>(result);
4943
}
5044
}

src/Web/Api/Controllers/v1/Users/UserController.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
using AutoMapper;
2-
using CleanTemplate.Api.Controllers.v1.Users.Requests;
1+
using CleanTemplate.Api.Controllers.v1.Users.Requests;
32
using CleanTemplate.ApiFramework.Tools;
43
using CleanTemplate.Application.Users.Command.CreateUser;
54
using CleanTemplate.Application.Users.Command.Login;
6-
using MediatR;
75
using Microsoft.AspNetCore.Authorization;
86
using Microsoft.AspNetCore.Mvc;
9-
using Microsoft.Extensions.Logging;
107
using Swashbuckle.AspNetCore.Annotations;
118
using System.Threading;
129
using System.Threading.Tasks;
@@ -16,20 +13,14 @@ namespace CleanTemplate.Api.Controllers.v1.Users
1613
[ApiVersion("1")]
1714
public class UserController : BaseControllerV1
1815
{
19-
public UserController(ILogger<UserController> logger,
20-
IMediator mediator,
21-
IMapper mapper)
22-
: base(logger, mediator, mapper)
23-
{ }
24-
2516
[HttpPost("signup")]
2617
[SwaggerOperation("sign up user")]
2718
[AllowAnonymous]
2819
public virtual async Task<ApiResult<bool>> SingUpAsync(SingUpRequest request, CancellationToken cancellationToken)
2920
{
30-
var command = _mapper.Map<SingUpRequest, CreateUserCommand>(request);
21+
var command = Mapper.Map<SingUpRequest, CreateUserCommand>(request);
3122

32-
var result = await _mediator.Send(command, cancellationToken);
23+
var result = await Mediator.Send(command, cancellationToken);
3324
return new ApiResult<bool>(result);
3425
}
3526

@@ -38,9 +29,9 @@ public virtual async Task<ApiResult<bool>> SingUpAsync(SingUpRequest request, Ca
3829
[AllowAnonymous]
3930
public virtual async Task<ApiResult<LoginResponse>> LoginAsync([FromForm] LoginRequest request, CancellationToken cancellationToken)
4031
{
41-
var command = _mapper.Map<LoginRequest, LoginCommand>(request);
32+
var command = Mapper.Map<LoginRequest, LoginCommand>(request);
4233

43-
var result = await _mediator.Send(command, cancellationToken);
34+
var result = await Mediator.Send(command, cancellationToken);
4435
return new ApiResult<LoginResponse>(result);
4536
}
4637
}

test/Api.Test/ProductControllerTest.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,10 @@ namespace CleanTemplate.Api.Test
1313
public class ProductControllerTest
1414
{
1515
ProductController productController;
16-
IMediator mediator;
17-
ILogger<ProductController> logger;
18-
IMapper mapper;
1916

2017
public ProductControllerTest()
2118
{
22-
mediator = new Mock<IMediator>().Object;
23-
logger = new Mock<ILogger<ProductController>>().Object;
24-
mapper = new Mock<IMapper>().Object;
25-
productController = new ProductController(logger, mediator, mapper);
19+
productController = new ProductController();
2620
}
2721

2822
[Theory]

0 commit comments

Comments
 (0)