Pergunta

Eu estou esperando que alguém pode me ajudar. Eu preciso para obter a web raiz do site atual do SPContext. É facilmente feito com o seguinte

SPContext.Current.Site.RootWeb

Eu estou confortável com a ideia de que o objeto SPSite aqui no SPContext.Current. Site .RootWeb não deve ser descartado, mas que sobre o objeto SPWeb que estou recebendo do SPSite . Será que, quando o SPSite do disposto get, o SPWeb rootweb se disposto a? Ou eu preciso eliminá-lo eu mesmo?

Foi útil?

Solução

As chamadas para SPSite.RootWeb não devem ser eliminados. Eliminação do SPSite também irá descartar o rootweb.

Há um erro no SPDisposeCheck onde bandeiras se você eliminá-lo, e se não o fizer (condenado de qualquer maneira!) Eu detalhou como eu resolver este neste blog , como você não pode usar um atributo SPDisposeCheckIgnore em blocos de privilégios elevados.

Outras dicas

Não, você não deve. Você deve apenas objetos dispose você está no controle de. Porque o contexto é algo criado pelo SharePoint que você não descarte este como outros objetos pode ser dependente deste.

Se você tivesse que criar sua própria instância de um SPWeb a partir desta propriedades de objetos do que precisaria ser eliminados. Ou seja ..

using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
 // do something
}

Aqui está um artigo sobre as melhores práticas de descartar objetos do SharePoint.

http://msdn.microsoft.com /en-us/library/aa973248(v=office.12).aspx

Você deve usar normalmente SPSite e SPWeb em uma cláusula usando.

using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // TODO: code for using SPWeb object
    }
}

Este automaticamente irá liberar corretamente o objeto SPWeb depois que você é feito com ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top