C# 非控制器类无法访问DbContext
我想在非控制器类中使用依赖项注入来访问DbContext对象 我有一个ShoppingCart控制器和一个购物车类,如下所示。在控制器类中,我成功地注入了DbContext,但在ShoppingCart类中没有。所以,我显式地从控制器传递_context对象 但是当我想直接使用ShoppingCart时,也就是说,没有控制器传递对象。我得到了ObjectDescoped异常 ShoppingCartController.cs:C# 非控制器类无法访问DbContext,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我想在非控制器类中使用依赖项注入来访问DbContext对象 我有一个ShoppingCart控制器和一个购物车类,如下所示。在控制器类中,我成功地注入了DbContext,但在ShoppingCart类中没有。所以,我显式地从控制器传递_context对象 但是当我想直接使用ShoppingCart时,也就是说,没有控制器传递对象。我得到了ObjectDescoped异常 ShoppingCartController.cs: public class ShoppingCartControl
public class ShoppingCartController : Controller
{
private readonly MrbFarmsDbContext _context;
private ShoppingCart cart;
public ShoppingCartController(MrbFarmsDbContext context)
{
_context = context;
cart = new ShoppingCart(_context);
}
}
ShoppingCart.cs:
public class ShoppingCart
{
private MrbFarmsDbContext _context;
public ShoppingCart(MrbFarmsDbContext context)//this constructer is called from Controller class.
{
_context = context;
}
public ShoppingCart()
{
}
}
方法:
public static ShoppingCart GetCart(HttpContext context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
我想在非控制器类中使用依赖项注入来访问DbContext对象
然后将这些类注入控制器,不要让控制器创建它们
通常情况下,你会
- ShoppingCartController(web api)
- 购物车服务(业务逻辑)
- ShoppingCart(普通的旧CLR对象,数据持有者,无逻辑)
新的
,并且它创建的不是一个简单、愚蠢的数据持有者,那么它可能是错误的
例如:
public class ShoppingCartController : Controller
{
private readonly IShoppingCartService shoppingCartService;
public ShoppingCartController(IShoppingCartService shoppingCartService)
{
this.shoppingCartService = shoppingCartService;
}
}
public class ShoppingCartService : IShoppingCartService
{
private readonly MrbFarmsDbContext context;
public ShoppingCartService(MrbFarmsDbContext context)
{
this.context = context;
}
}
您确定在启动时以正确的方式注入了类吗?
\u context
是一个私有变量。传递context
对象,而不是相同的\u context
。谢谢@nvoigt。这有帮助。但我做了一个改变——我完全删除了ShoppingCart类。我现在已经在服务类中编写了所有业务逻辑。