Wann sollte Dispose aufgerufen werden, wenn SPContext.Site an eine Klassenbibliothek übergeben wird?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/75597

  •  10-12-2019
  •  | 
  •  

Frage

Ich bin nur auf der Suche nach einer kleinen Überprüfung dieser Sache!

Ich schaue mir viele Kurse an, die das haben SPSite oder SPWeb als Konstruktor für die Klasse.

Die Klasse wird mit instanziiert SPContext.Site als SPSite-Parameter

z.B.

public MyClass {
  SPWeb _web;
  public MyClass(SPSite site) {
    _web = site.RootWeb;
  }
  // Other methods that make use of _web
}

Sollen _web entsorgt werden?Ist _web nur ein Zeiger auf SPContext.Site.RootWeb oder gibt es eine andere Kopie von SPWeb die entsorgt werden müssen?

Das kenne ich mit SPContext.Site.OpenWeb() Du solltest anrufen Dispose().

Was ist also mit der oben genannten Verwendung?

Wird passieren SPSite / SPWeb Wenn Sie es einer lokalen Variablen zuweisen, wird immer nur auf dieselbe verwiesen SPContext ?

War es hilfreich?

Lösung

In Ihrem Fall _web muss nicht entsorgt werden, da Sie es von erhalten RootWeb und abgerufene Webobjekte RootWeb müssen nicht entsorgt werden.

EIDT

Auch wenn die SPSite Das als Parameter an den Konstruktor übergebene Objekt wird von abgeleitet SPContext, es muss nicht entsorgt werden.Andernfalls muss es je nach Anforderung entweder in der aufgerufenen Klasse oder in der aufrufenden Klasse entsorgt werden.

Andere Tipps

Rufen Sie Dispose() nicht explizit für die SPSite.RootWeb-Eigenschaft auf.Die Entsorgungsbereinigung wird automatisch von SharePoint und dem .NET Framework durchgeführt.Bei vorhandenen SharePoint-Anpassungen wird die Entfernung von explizitem RootWeb Dispose empfohlen, um eine Grenzfallbedingung zu vermeiden, bei der SPContext.Current.Web mit SPSite.RootWeb identisch ist.Bei der Entsorgung von RootWeb können Probleme auftreten, wenn es von einer beliebigen Variante von SPContext bezogen wird (zum Beispiel:SPContext.Site.RootWeb, SPContext.Current.Site.RootWeb und GetContextSite(Context).RootWeb ).

Weitere Informationen finden Sie unter...MSDN

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top