How you generate actions in controllers ? Usually,you create a Business Logic class and then you expose via a controller in a WebAPI . And,if you are very careful,then you use the Skinny controllers concept ( read more about it at 3 ways to keep your asp.net mvc controllers thin (jonhilton.net) ).
So this implies usually repeating code in order to call the functions / methods from the business logic class. I can give an example:
public class RepositoryWF
{
private static readonly string[] Summaries = new[]
{
“Freezing”,”Bracing”,”Chilly”,”Cool”,”Mild”,”Warm”,”Balmy”,”Hot”,”Sweltering”,”Scorching”
};
public WeatherForecast[] DataToDo(int i)
{
var rng = new Random();
return Enumerable.Range(1,i).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20,55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();}
// more methods / actions
and the controller
[ApiController]
[Route(“[controller]/[action]”)]
public partial class WeatherForecastController : ControllerBase
{private readonly ILogger<WeatherForecastController> _logger;
private readonly RepositoryWF repository;
public WeatherForecastController(ILogger<WeatherForecastController> logger,RepositoryWF repository)
{
_logger = logger;
this.repository = repository;
}[HttpGet()]
public WeatherForecast[] DataToDo(int i)
{
return repository.DataToDo(i);
}}
What if,instead of the writing code,we will auto – generate the actions ?
For this I was thinking that was fun to use Source Generators – https://devblogs.microsoft.com/dotnet/new-c-source-generator-samples/ .
The code should read like this:
[ApiController]
[Route(“[controller]/[action]”)]
public partial class WeatherForecastController : ControllerBase
{private readonly ILogger<WeatherForecastController> _logger;
[AutoActions]
private readonly RepositoryWF repository;
public WeatherForecastController(ILogger<WeatherForecastController> logger,RepositoryWF repository)
{
_logger = logger;
this.repository = repository;
}
}
So the only thing that you should do is annotate your class with
[AutoActions]
private readonly RepositoryWF repository;
and the actions will be generated for you!
Leave a Reply