【发布时间】:2022-02-23 21:52:44
【问题描述】:
我在我的控制器中注入了两个类。
在get请求中,当我放一个断点时,我可以看到构造函数中正在检索一个实例。
但是在 post 操作中,实例为空?
这是我的控制器类;
using BethanyPieShop.Models;
using Microsoft.AspNetCore.Mvc;
namespace BethanyPieShop.Controllers
{
public class OrderController : Controller
{
public IOrderRepository _orderRepository { get; set; }
public ShoppingCart _shoppingCart { get; set; }
public OrderController(IOrderRepository _orderRepository, ShoppingCart _shoppingCart)
{
_orderRepository = _orderRepository;
_shoppingCart = _shoppingCart;
}
public IActionResult Checkout()
{
return View();
}
[HttpPost]
public IActionResult Checkout(Order order)
{
// Null here _shoppingCart
var items = _shoppingCart.GetShoppingCartItems();
_shoppingCart.ShoppingCartItems = items;
if (_shoppingCart.ShoppingCartItems.Count == 0)
{
ModelState.AddModelError("", "Your cart is empty, add some pies first");
}
if (ModelState.IsValid)
{
_orderRepository.CreateOrder(order);
_shoppingCart.ClearCart();
return RedirectToAction("CheckoutComplete");
}
return View(order);
}
public IActionResult CheckoutComplete()
{
ViewBag.CheckoutCompleteMessage = ", thanks for your order. You'll soon enjoy our delicious pies!";
return View();
}
}
}
我在主类中注册了服务:
builder.Services.AddScoped<IOrderRepository, OrderRepository>();
builder.Services.AddScoped<ShoppingCart>();
【问题讨论】:
-
您的参数与字段同名,因此请隐藏它们。我怀疑您已经收到有关此的编译器警告。您的代码正在将参数值分配给参数本身
-
不要在参数名称中使用前导下划线。按照惯例,前导下划线仅用于私有字段。
标签: c# asp.net-core dependency-injection