非控制器类无法访问 DbContext

我想在非控制器类中使用依赖项注入来访问我的 DbContext 对象。


我有一个 ShoppingCart 控制器和一个购物车类,如下所示。在控制器类中,我成功注入了 DbContext,但在 ShoppingCart 类中却没有。因此,我显式地从控制器传递 _context 对象。


但是当我想直接使用 ShoppingCart 时,即不需要控制器传递对象。我收到 ObjectDescoped 异常。


ShoppingCartController.cs:


  public class ShoppingCartController : Controller

  {

    private readonly MrbFarmsDbContext _context;

    private ShoppingCart cart;


    public ShoppingCartController(MrbFarmsDbContext context)

    {

        _context = context;

        cart = new ShoppingCart(_context);

    }

   }

购物车.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;

    }


LEATH
浏览 73回答 1
1回答

Qyouu

我想在非控制器类中使用依赖项注入来访问我的 DbContext 对象。然后将这些类注入到控制器中,不要让控制器创建它们。通常情况下,你会有ShoppingCartController(网络 API),ShoppingCartService(业务逻辑)ShoppingCart(普通的旧 CLR 对象、数据持有者、无逻辑)控制器应该注入服务。控制器甚至不知道有“上下文”这样的东西。该服务获取注入的上下文并执行所有业务逻辑。而购物车只是一个数据持有者。请new记住,如果您new在代码中看到 a 并且它创建的东西不是普通的、愚蠢的数据持有者,那么它可能是错误的。例子: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;    }}
打开App,查看更多内容
随时随地看视频慕课网APP