Правильное использование SPWEB из SPContext для вытягивания списков

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/39942

Вопрос

Так, после примерно двух часов на эту тему я тщательно смущен. Есть точки зрения повсюду на то, как, когда и зачем использовать Dispose () на объектах SPWEB, поскольку они относятся к SPCONTEXT.

Может кто-нибудь очистить это для меня в определенном контексте? Я создаю определение сайта, которое мгновенные списки, так предположим, что я всегда могу вытащить списки из SPContext. Никогда не существует опасность для выполнения консоли или PowerShell.

Правило, кажется, никогда, никогда, никогда не утилизируют SPContext.current.Web объектом. Это правило также относится к зеркальным экземплярам? Значение:

using (SPWeb web = SPContext.Current.Web)
{
    SPList TargetList = web.GetList(web.ServerRelativeUrl + "/lists/Post");
    SPListItemCollection items = TargetList.GetItems(query);
}
.

vs

SPList TargetList = SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/Post");
SPListItemCollection items = TargetList.GetItems(query);
.

Есть ли настоящая, качественная разница здесь? Не сохраняю цикл процесса, не создавая нового объекта, который действительно просто служит заполнителем?

Было бы ли опасность в написании объекта доступа к данным?

public static SPList PostList()
{
  return SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/Post");
}
static public List<Post> GetPostsByCommunity(string CommunityName) 
{
    SPList TargetList = PostList();
    SPListItemCollection items = TargetList.GetItems(query);
}
.

С момента списков, с которыми я работаю, представляют собой небольшую коллекцию из 4, я мог бы иметь статические объекты для каждого, а затем иметь очень плотные и простые методы доступа к данным, которые возвращают объекты, заполненные возвращенной информацией.

(игнорирование отсутствия запроса и цикла. Я хочу сосредоточиться чисто на доступе данных)

Подскажите, почему это плохое представление и какой правильный способ сделать это.

Это было полезно?

Решение

Вы правы, никогда не распорядитесь объектом, извлеченным из свойства от SPContext.

Простая причина, по которой существует, вы никогда не сможете быть уверены, что есть другая нить, элемент управления или другой код, который выполняется после того, как ваш код, и ожидает, что правильно существует.

Ваши первые два примера (где вы положите по сравнению с другими) функционально идентичны, за исключением того, что вы утилизируете веб-свойство SPContext.Courent во втором, что плохо рекомендуется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top