using语句与Repeater DataBinds和事件一起使用

时间:2013-08-20 15:00:07

标签: c# linq eval idisposable using

关于下面的代码,在查找需要处理的对象时,using语句是否考虑了通过_ItemDataBound方法和Eval方法调用的对象?或者它会在附加事件和触发之前尝试处理,因为它们发生在生命周期的后期?

换句话说,它是否仅在调用所有Evals和附加事件到转发器之后处理datacontext,或者这会导致datacontext已被处置错误吗?

protected void Page_Load(object sender, EventArgs e)
{
    using (EventManager manager = new EventManager())
    {
        EventDates = manager.GetWhatsOn(Request.QueryString["category"]);

        rptEventDates.DataSource = EventDates;
        rptEventDates.DataBind();
    }

...

public class EventManager : IDisposable
{
    private MainDataContext db;
    public EventManager()
    {
        db = new MainDataContext();
    }

    ....other methods....

    public void Dispose()
    {
        db.Dispose();
    }
}

1 个答案:

答案 0 :(得分:1)

  

关于下面的代码,在查找需要处理的对象时,using语句是否考虑通过_ItemDataBound方法和Eval方法调用的对象?

没有。它根本不“找到”要处置的对象 - 它只是处理语句第一部分中引用的对象。因此,您的代码大致相当于:

EventManager manager = new EventManager();
try
{
    EventDates = manager.GetWhatsOn(Request.QueryString["category"]);

    rptEventDates.DataSource = EventDates;
    rptEventDates.DataBind();
}
finally
{
    manager.Dispose();
}

其他任何内容都不会被处理,但EventManager本身肯定会

如果有任何事情要求资源而不是在稍后处理,则不应使用using语句。