Использование одноразовых объектов SharePoint (веб-частей) - PullRequest
2 голосов
/ 04 мая 2009

При написании веб-частей в SharePoint реализуете ли вы IDisposable с помощью предложения using? Или вы избавляетесь от своих объектов в try/catch/finally? И то и другое? Зависит? Почему вы выбрали один над другим?

Справочная информация:

Я работаю над немного унаследованного кода, который не реализует IDisposable, поэтому я читал, чтобы исправить проблему. В MSDN есть хорошая статья, посвященная «лучшей практике»:

http://msdn.microsoft.com/en-us/library/aa973248.aspx

, который рекомендует using, но затем продолжает, что во многих случаях не рекомендуется использовать using.

1 Ответ

5 голосов
/ 04 мая 2009

Я могу понять причину в статье - реальный ответ так же ясен, как и грязь:)

Когда дело доходит до разработки веб-частей (или разработки с использованием API SharePoint в целом), удаление определенных объектов (в частности, объектов SPOM) приведет к непредсказуемым результатам, если вы не будете правильно создавать экземпляры своих объектов.

В частности, если вы получите ссылку на объект на SPSite или SPWeb из текущего контекста и попытаетесь избавиться от него (с помощью выражения using или try / finally), вы получите ошибку ссылки на объект из стека SharePoint .

Правильный способ избавиться от ваших объектов SP (SPSite, SPWeb и т. Д.) - это создать новый объект SP (в отличие от использования контекста для его получения) с сайта, используя URL-адрес. Например:

using (SPSite siteCollection = new SPSite("http://your_site_url"))
{
  using (SPWeb site = siteCollection.OpenWeb("News"))
  {
    //do stuff with your news web
  }
}

Вот пример кода, который выдает ошибку ссылки на объект, если вы попытаетесь его использовать:

using(contextSite = SPControl.GetContextSite(Context))
{
  using (SPWeb site = siteCollection.OpenWeb("News"))
  {
    //do stuff with your news web
  }
}

Ошибка не возникнет во время использования блока, но возникнет позже, когда SharePoint попытается что-то сделать с сайтом внутренне.

С точки зрения общего использования, я большой поклонник использования () вместо try / finally, если у вас есть IDisposable объект. Единственный раз, когда я выбираю try / finally, - это если мне нужно выполнить дополнительную логику вокруг отмены выделения неидентифицируемых объектов.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...