Quando chiamare Dispose se si passa SPContext.Sito in una libreria di classi?
Domanda
Sto solo cercando un po ' di controllo di sanità mentale su questo!
Sto guardando molte classi che hanno SPSite
o SPWeb
come costruttore per la classe.
La classe viene istanziata usando SPContext.Site
come parametro SPSite
ad es.
public MyClass {
SPWeb _web;
public MyClass(SPSite site) {
_web = site.RootWeb;
}
// Other methods that make use of _web
}
Dovere _web
essere smaltiti?È _web solo un puntatore a SPContext.Sito.RootWeb o c'è un'altra copia di SPWeb
che devono essere smaltiti?
Lo so con SPContext.Site.OpenWeb()
dovresti chiamare Dispose()
.
Quindi, per quanto riguarda l'utilizzo di cui sopra?
Passerà SPSite
/ SPWeb
come assegnarlo a una variabile locale sempre solo avere il riferimento alla stessa SPContext
?
Soluzione
Nel tuo caso _web
non ha bisogno di essere smaltito come si sta ottenendo dal RootWeb
e oggetti web recuperati da RootWeb
non deve essere smaltito.
EIDT
Inoltre, se il SPSite
l'oggetto passato come parametro al costruttore è derivato dal SPContext
, non ha bisogno di esser smaltito.Altrimenti deve essere disposto nella classe chiamata o dalla classe chiamante a seconda del requisito.
Altri suggerimenti
Non chiamare esplicitamente Dispose () sullo SPSite.Proprietà RootWeb.La pulizia di dispose verrà gestita automaticamente da SharePoint e. NET Framework.Per le personalizzazioni di SharePoint esistenti, si consiglia di rimuovere explicit Rootweb Dispose per evitare una condizione di casi limite in cui SPContext.Attuale.Web ha l'uguaglianza con lo SPSite.RootWeb.Possono verificarsi problemi durante lo smaltimento di RootWeb quando ottenuto da qualsiasi variazione di SPContext (ad esempio:SPContext.Sito.RootWeb, SPContext.Attuale.Sito.RootWeb e GetContextSite (Contesto).RootWeb).
Per più visita...MSDN