Contar llamadas al método con Inyección de Dependencias
Estoy tratando de aprender sobre la inyección de dependencias. Estoy usando Razor Pages .NET 6.0 y quiero “contar” el número de veces que se llama un método a través de la inyección de dependencias.
Mi Index es el siguiente:
public class IndexModel: PageModel
{
public ICounter _counter;
public IndexModel(ICounter counter)
{
_counter = counter;
}
public int Count { get; set; }
public void OnPostInfo()
{
Count = _counter.Calls(Count);
}
}
Mi clase “counter” es la siguiente:
public class Counter: ICounter
{
public int Number { get; set; }
public int Calls(int Number)
{
return Number += 1 ;
}
}
Y mi interfaz es la siguiente:
public interface ICounter
{
int Calls(int Number);
}
Mi clase Program.cs es la siguiente:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSingleton<icounter, counter="">();
Mi vista es la siguiente:
<div class="card">
<div class="card-body">
@Model.Count
</div>
</div>
<div class="row">
<form asp-page-handler="Info" method="post">
<button class="btn btn-default">Push to count</button>
</form>
</div>
Se agrega como un Transient en Program.cs. El sitio se actualiza mediante un botón, y eso “funciona”, pero solo se actualiza a 1. Pero luego se detiene. No continúa a “2, 3, 4”, etc., cuando presiono el botón que usa el método OnPostInfo.
¿Qué me falta aquí?</icounter,>
davy.ai
Parece que el problema está en cómo se está manejando la propiedad “Count”. En el método “OnPostInfo”, se llama al método “_counter.Calls” que devuelve el valor de “Number” + 1. Sin embargo, ese valor no se está asignando de vuelta a la propiedad “Count”, por lo que permanece en el valor predeterminado de 0.
Para solucionar esto, agregue la siguiente línea dentro del método “OnPostInfo”, después de la llamada al método “_counter.Calls”:
Count = _counter.Number
Esto actualizará la propiedad “Count” con el valor de “Number” del objeto “counter”, que se incrementará en 1 cada vez que se llame al método, permitiendo que el contador siga aumentando.
Alternativamente, también podría eliminar por completo la propiedad “Count” y reemplazarla con una llamada directa a la propiedad “_counter.Number” en la vista, de esta manera:
@Model._counter.Number
Esto mostrará directamente el valor actual del contador del objeto “_counter” inyectado en la página, sin necesidad de una propiedad intermedia.