我正在尝试通过遵循此MS tutorial在ASP.NET Core中实现购物车。我有一个购物车类和一个购物车控制器。
我要改编的教程中的目标代码:
public partial class ShoppingCart
{
MusicStoreEntities storeDB = new MusicStoreEntities();
string ShoppingCartId { get; set; }
public const string CartSessionKey = "CartId";
public static ShoppingCart GetCart(HttpContextBase context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
我的控制器代码是使用脚手架创建的,并按如下方式注入了DbContext:
public class ShoppingCartController : Controller
{
private readonly StoreContext _context;
public ShoppingCartController(StoreContext context)
{
_context = context;
}
}
我在购物车中尝试将dbcontext注入构造函数的代码:
public class ShoppingCart
{
private static StoreContext db;
public ShoppingCart(StoreContext context)
{
db = context;
}
string ShoppingCartId { get; set; }
public const string CartessionKey = "CartId";
public static ShoppingCart GetCart(HttpContext context)
{
var cart = new ShoppingCart(db);
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
}
使用脚手架创建的我的StoreContext:
public class StoreContext : DbContext
{
public StoreContext(DbContextOptions<StoreContext> options)
: base(options)
{
}
public DbSet<Product> Product { get; set; }
public DbSet<Supplier> Supplier { get; set; }
public DbSet<Cart> Cart { get; set; }
public DbSet<Order> Order { get; set; }
public DbSet<OrderDetail> OrderDetail { get; set; }
}
问题是,当我运行代码并尝试向购物车中添加商品时,出现以下错误消息:
所以,我的理解如下:.Net Core已实现IoC,这意味着我不必创建新的DbContext,而是通过依赖注入向我的框架求助。这么说,为什么不为我注入Shopping Cart类(不是控制器)呢?为什么它为空?我肯定会将产品传递给方法。请看下面:
我查看了以下问题,但它们不能解决我的问题。