我创建了一个我想在页面后面的代码中使用的存储库类。我在代码隐藏页面中使用构造函数注入来实例化存储库。
存储库类:
BritanniaPremierEntities PBEntities = new BritanniaPremierEntities();
public IQueryable<TradeRoutes> GetRoutes()
{
var routes = PBEntities.TradeRoutes.OrderBy(c => c.ConsignmentDate);
return routes;
}
public IQueryable<TradeRoutes> GetExpiredRoutes()
{
var routes = PBEntities.TradeRoutes.Where(
c => c.ConsignmentDate <= System.DateTime.Now);
return routes;
}
页面后面的代码
private IRepository repos;
public Admin_TradeRoutesAdmin()
: this(new Repository())
{
}
public Admin_TradeRoutesAdmin(IRepository repos)
{
this.repos = repos;
}
public IQueryable GetTradeRoutes()
{
// call repository method
return repos.GetRoutes();
}
这是我有点困惑的地方。我应该如何确保存储库正确处理?例如,我无法使用代码隐藏页面中的语句包装存储库调用,从而在存储库中使用dispose方法。
答案 0 :(得分:5)
您应该使用Register Resolve Release pattern。
具体而言,您应该记住始终发布您解决的内容。作曲家有责任跟踪是否应该处理依赖关系。这是不是微不足道的,因为它取决于不同的因素:
这是一项非常复杂的任务,您应该使用适当的DI容器来完成这项工作。
但是,请记住,这最终取决于您的DI Container是否支持退役。例如,Castle Windsor确实在StructureMap没有。
答案 1 :(得分:1)
嗯,通常的想法是,只要它是IDisposable
,DI容器创建的任何内容都会被丢弃。唯一的问题是何时发生。我怀疑不同容器之间可能存在差异,但我对此的看法是在正在创建的对象中实现Dispose()
,并在正在注入的对象上显式调用Dispose()
。