使用依赖注入计算对方法的调用

Count calls to method with Dependency Injection

我正在尝试了解依赖注入。我正在使用 .net 6.0 Razor Pages,我想“计数”,通过依赖注入调用方法的次数。 我的索引如下:

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);
    }
}

我的“计数器”class,如下

public int Number { get; set; }
public int Calls(int Number)
{
    return Number += 1 ;
}

还有我的界面

public interface ICounter
{
   int Calls(int Number);     
}

我的Program.csclass

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddSingleton<ICounter, Counter>();

我的观点。

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

它在 Program.cs 中作为瞬态添加。该网站通过一个按钮更新,并且“有效”,但它只更新到 1。但随后它停止了。当我按下使用 OnPostInfo 方法的按钮时,它不会继续显示“2、3、4”等。

我在这里错过了什么?

其实不是寿命造成的。由于 Count 值没有传递给后端,所以后端将始终为 Count.

获取 int 默认值 0

您需要设置一个隐藏的输入或路由参数来传递Count

第一种设置隐藏输入法:

查看:

<div class="card">
    <div class="card-body">
        @Model.Count
    </div>
</div>
<div class="row">
    <form asp-page-handler="Info" method="post">
        <input hidden asp-for="Count" value="@Model.Count" /> <!--set the hidden input-->
        <button class="btn btn-default">Push to count</button>
    </form>
</div>

页面模型:

public class IndexModel : PageModel
{
    public ICounter _counter;

    public IndexModel(ICounter counter)
    {

        _counter = counter;
    }
    [BindProperty]  //add this attribute to get the Count value
    public int Count { get; set; }
    public void OnPostInfo()
    {
        Count = _counter.Calls(Count);
    }
}

路由参数设置方式二:

查看:

<div class="card">
    <div class="card-body">
        @Model.Count
    </div>
</div>
<div class="row">                  <!--add asp-route-countNum -->
    <form asp-page-handler="Info" asp-route-countNum="@Model.Count" method="post">
        <button class="btn btn-default">Push to count</button>
    </form>
</div>

页面模型:

public class IndexModel : PageModel
{
    public ICounter _counter;

    public IndexModel(ICounter counter)
    {

        _counter = counter;
    }

    public int Count { get; set; }
    public void OnPostInfo(int countNum)   //add parameter here
    {
        Count = _counter.Calls(countNum);   //change here... 
    }
}

结果: