使用依赖注入计算对方法的调用
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...
}
}
结果:
我正在尝试了解依赖注入。我正在使用 .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
.
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...
}
}
结果: