Question

J'espère que quelqu'un peut me aider. Je dois obtenir le web racine du site actuel du SPContext. Il est facile à faire avec les éléments suivants

SPContext.Current.Site.RootWeb

Je suis à l'aise avec l'idée que l'objet SPSite ici à SPContext.Current. Site .RootWeb ne doit pas être mis au rebut, mais qu'en l'objet SPWeb j'obtenir de l'SPSite . Est-ce que, lorsque le SPSite get disposé, le rootweb SPWeb disposés à se? Ou dois-je disposer de moi-même?

Était-ce utile?

La solution

Les appels à SPSite.RootWeb ne doivent pas être mis au rebut. Le SPSite Mise au rebut également disposer le rootweb.

Il y a un bogue dans SPDisposeCheck où il drapeaux si vous ne le jetez, et si vous ne le faites pas (damnés de toute façon!) Je l'ai expliqué comment je résolu ce problème dans ce billet de blog , comme vous ne pouvez pas utiliser un attribut SPDisposeCheckIgnore dans des blocs de privilèges élevés.

Autres conseils

Non, vous ne devriez pas. Vous devez uniquement les objets que vous êtes en Dispose contrôle. Parce que le contexte est quelque chose créé par SharePoint vous ne jetez pas ce que d'autres objets peuvent dépendre de cela.

Si vous deviez créer votre propre instance d'un SPWeb de ces propriétés des objets qu'il aurait besoin d'être disposé. I.e. ..

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

Voici un article sur les meilleures pratiques de la disposition des objets SharePoint.

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

Vous devez normalement utiliser SPSite et SPWeb dans une clause à l'aide.

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

automatiquement libérer correctement l'objet SPWeb une fois que vous avez fini avec elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top