Когда вызывать Dispose при передаче SPContext.Site в библиотеку классов?
Вопрос
Я просто хочу немного проверить здравомыслие по этому поводу!
Я смотрю на многие классы, которые имеют SPSite
или SPWeb
в качестве конструктора класса.
Класс создается с использованием SPContext.Site
как параметр SPSite
например
public MyClass {
SPWeb _web;
public MyClass(SPSite site) {
_web = site.RootWeb;
}
// Other methods that make use of _web
}
Должен _web
быть утилизированы?Является ли _web просто указателем на SPContext.Site.RootWeb или существует другая копия SPWeb
от этого нужно избавиться?
Я знаю это с SPContext.Site.OpenWeb()
тебе следует позвонить Dispose()
.
А как насчет вышеупомянутого использования?
Будет проходить SPSite
/ SPWeb
поскольку присвоение его локальной переменной всегда имеет ссылку на одну и ту же SPContext
?
Решение
В твоем случае _web
не нужно утилизировать, поскольку вы получаете его из RootWeb
и веб-объекты, полученные из RootWeb
не нужно утилизировать.
ЭИДТ
Кроме того, если SPSite
Объект, передаваемый в качестве параметра конструктору, является производным от SPContext
, его не нужно утилизировать.В противном случае его необходимо разместить либо в вызываемом классе, либо в вызывающем классе, в зависимости от требований.
Другие советы
Не вызывайте Dispose() явным образом для свойства SPSite.RootWeb.Очистка удаления будет выполняться автоматически SharePoint и платформой .NET.Для существующих настроек SharePoint рекомендуется удалить явный RootWeb Dispose, чтобы избежать пограничного случая, когда SPContext.Current.Web равен SPSite.RootWeb.Проблемы могут возникнуть при удалении RootWeb, полученном из любого варианта SPContext (например:SPContext.Site.RootWeb, SPContext.Current.Site.RootWeb и GetContextSite(Context).RootWeb ).
Для получения дополнительной информации посетите...MSDN