gpt4 book ai didi

asp.net-mvc - Ninject + ASP.net MVC + Entity Framework - 我的上下文何时处理?

转载 作者:行者123 更新时间:2023-12-04 03:45:52 24 4
gpt4 key购买 nike

我在我的 MVC 3 应用程序中使用 Ninject,我的依赖项之一是 Entity Framework :

interface IFooRepository
{
Foo GetFoo(int id);
}

public EFFooRepository : IFooRepository
{
private FooDbContext context;

public EFFooRepository(FooDbContext context)
{
this.context = context;
}
}

我在 Ninject 中设置了这样的绑定(bind),所以如果我有多个依赖项并且它们都需要数据上下文,它们最终会共享相同的上下文:
Bind<FooDbContext>().ToSelf().InRequestScope();

我不确定我的上下文何时会被处理。由于我不是实例化它的人,它会被处理掉还是会在垃圾收集时被处理掉? Ninject 知道在处理完任何东西后要处理它吗?

最佳答案

如果 FooDbContext实现 IDisposable , Ninject 会自动调用 Dispose 在请求结束时对其进行方法。

以下是验证它的方法:

  • 使用默认模板
  • 创建一个新的 ASP.NET MVC 3 应用程序
  • 安装 Ninject.Mvc3 NuGet 包
  • 有以下几点:
    public interface IFooRepository
    {
    }

    public class FooDbContext: IDisposable
    {
    public void Dispose()
    {
    throw new NotImplementedException();
    }
    }

    public class EFFooRepository : IFooRepository
    {
    private FooDbContext _context;

    public EFFooRepository(FooDbContext context)
    {
    _context = context;
    }
    }

    public class HomeController : Controller
    {
    private readonly IFooRepository _repo;

    public HomeController(IFooRepository repo)
    {
    _repo = repo;
    }

    public ActionResult Index()
    {
    return View();
    }
    }
  • RegisterServices 中添加以下内容~/App_Start/NinjectMVC3.cs的方法:
    private static void RegisterServices(IKernel kernel)
    {
    kernel.Bind<FooDbContext>().ToSelf().InRequestScope();
    kernel.Bind<IFooRepository>().To<EFFooRepository>();
    }
  • 运行应用程序。正如请求结束时所预期的那样,FooDbContext实例被处置,NotImplementedException抛出异常。
  • 关于asp.net-mvc - Ninject + ASP.net MVC + Entity Framework - 我的上下文何时处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7450192/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com