Domanda

Spero che qualcuno possa aiutarmi.Ho bisogno di ottenere il Web principale del sito corrente da SPContext.È fatto facilmente con quanto segue

SPContext.Current.Site.RootWeb

Mi piace l'idea che l'oggetto SPSite qui in SPContext.Current. Site .RootWeb non debba essere eliminato, ma per quanto riguarda l'oggetto SPWeb che ricevo da SPSite.Quando SPSite verrà eliminato, verrà eliminato SPWeb rootweb?O devo smaltirlo da solo?

È stato utile?

Soluzione

Le chiamate a SPSite.RootWeb non devono essere eliminate.Lo smaltimento di SPSite eliminerà anche RootWeb.

C'è un bug in SPDisposeCheck dove viene segnalato se lo smaltisci, e se non lo fai (dannazione in entrambi i casi!) Ho spiegato in dettaglio come ho risolto questo in questo post del blog , poiché non puoi utilizzare un attributo SPDisposeCheckIgnore in blocchi di privilegi elevati.

Altri suggerimenti

No, non dovresti.Dovresti smaltire solo gli oggetti di cui hai il controllo.Poiché il contesto è qualcosa creato da SharePoint, non lo elimini poiché altri oggetti potrebbero dipendere da questo.

Se dovessi creare la tua istanza di un SPWeb dalle proprietà di questo oggetto, allora sarebbe necessario eliminarlo.Cioè ..

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

Di seguito è riportato un articolo sulle procedure consigliate per l'eliminazione degli oggetti di SharePoint.

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

Normalmente dovresti usare SPSite e SPWeb in una clausola using.

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

Questo rilascerà automaticamente l'oggetto SPWeb dopo averlo finito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top