Sharepoint: Как правильно получить текущий сайт / веб / список - PullRequest
3 голосов
/ 26 апреля 2010

Каков наилучший способ получить текущий сайт / веб / список?

Вариант 1 - повторное использование существующих объектов

        SPSite site = SPContext.Current.Site;
        SPweb web = SPContext.Current.Web;
        SPList list = SPContext.Current.List;

Вариант 2 - Создание новых объектов

        SPSite site = new SPSite(SPContext.Current.Site.ID); // dispose me
        SPweb web = site.OpenWeb(SPContext.Current.Web.ID); // dispose me
        SPList list = web.Lists[SPContext.Current.List.ID];

У меня возникли проблемы при использовании варианта 1 в некоторых ситуациях. С тех пор я выбрал второй вариант, и до сих пор он работал нормально.

Что вы думаете по этому поводу? Мне вообще лучше пойти с вариантом 2? Другие предложения?

Ответы [ 2 ]

4 голосов
/ 26 апреля 2010

Используйте первый вариант, потому что он более ресурсоэффективен, так как вам не нужно создавать новый объект (например, метод OpenWeb включает запрос базы данных для выполнения своей работы). Но вам не разрешается удалять объекты из SPContext, это определенно вызовет у вас проблемы.

Вы должны использовать второй вариант, если ваш код не выполняется в контексте страниц приложения (например, таймер SharePoint или рабочий процесс), поскольку объект SPContext.Current будет нулевым.

Ссылка

И да, если вы открываете объект SPWeb или SPSite, вы ДОЛЖНЫ располагать им .

2 голосов
/ 26 апреля 2010

Обычно я использую вариант 2 (который, как я полагаю, соответствует подходу, рекомендованному Microsoft), но я склоняюсь к тому, чтобы обернуть вещи с помощью using, чтобы убедиться, что они утилизируются должным образом. Пример:

using (SPSite site = new SPSite("MY SITE URL"))
{
  using (SPWeb web= site.OpenWeb())
   {
       // Do stuff
   }
} 

Этот подход позволяет вам четко указывать, когда объекты создаются и уничтожаются.

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