es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,>

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.