Dis*_*ile 9 asp.net-mvc entity-framework dependency-injection ninject inversion-of-control
我在我的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<FooDbContext>().ToSelf().InRequestScope();
我不确定何时处理我的背景.既然我不是那个实例化它的人,它会不会被处理掉,或者它会在垃圾收集时被处理掉?Ninject是否知道在完成任何事情后处理它?
Dar*_*rov 11
如果是FooDbContextimplements IDisposable,Ninject会Dispose在请求结束时自动调用它上面的方法.
以下是验证方法:
Ninject.Mvc3NuGet包有以下内容:
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抛出异常.
| 归档时间: | 
 | 
| 查看次数: | 2352 次 | 
| 最近记录: |