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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在Ninject中设置了这样的绑定,所以如果我有多个依赖项并且它们都需要数据上下文,它们最终会共享相同的上下文:
Bind<FooDbContext>().ToSelf().InRequestScope();
Run Code Online (Sandbox Code Playgroud)
我不确定何时处理我的背景.既然我不是那个实例化它的人,它会不会被处理掉,或者它会在垃圾收集时被处理掉?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();
}
}
Run Code Online (Sandbox Code Playgroud)在以下RegisterServices方法中添加以下内容~/App_Start/NinjectMVC3.cs:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<FooDbContext>().ToSelf().InRequestScope();
kernel.Bind<IFooRepository>().To<EFFooRepository>();
}
Run Code Online (Sandbox Code Playgroud)运行该应用程序.正如在请求结束时所预期的那样,FooDbContext实例被处理并NotImplementedException抛出异常.
| 归档时间: |
|
| 查看次数: |
2352 次 |
| 最近记录: |