2010-10-14 2 views
1

Est-il possible d'hériter de classes SharePoint telles que: SPWeb, SPList, etc. ou ces classes sont-elles scellées? Je n'ai pas pu trouver la bonne réponse.Est-il possible d'hériter de SPWeb?

Chris


Merci pour replys. Riche, vous avez raison - les constructeurs sont internes. Cela signifie donc que je ne peux pas étendre la fonctionnalité de ces classes de manière élégante?

Répondre

0

Selon leurs pages MSDN, les classes ne sont pas étanches:

SPWeb Class

SPList Class

Même si vous pourriez être en mesure d'hériter de ces classes, je ne vois pas le point depuis vous ne pouvez pas forcer SharePoint à les utiliser en interne.

Il peut être plus judicieux de fournir votre fonctionnalité ajoutée via des méthodes d'extension plutôt que d'hériter réellement des classes de base.

0

SPWeb et SPList sont scellés dans SharePoint 2007, voir: http://blogs.msdn.com/b/francischeung/archive/2008/08/22/unit-testing-sharepoint-2007-applications.aspx

Mais ils ne sont pas scellées dans SharePoint 2010, voir: http://my.safaribooksonline.com/9781435456457/365

+0

Intéressant. Si vous consultez les documents MSDN pour ces classes, vous pouvez voir clairement que le mot clé sealed n'est pas mentionné (comme c'est le cas pour d'autres classes scellées sur MSDN). –

+0

@justin, c'était une différence entre 2007 et 2010, j'ai mis à jour la réponse –

+0

Mais même si vous passez la documentation MSDN à WSS 3.0 (qui était le WSS utilisé dans SharePoint 2007), ils ne semblent toujours pas scellés. –

2

Selon réflecteur, SPWeb n'est pas scellé en 2007 ou 2010.

2007:

[SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel=true)] 
public class SPWeb : IDisposable, ISecurableObject 

2010:

[SubsetCallableType, 
ClientCallableType(Name="Web", ServerTypeId="{A489ADD2-5D3A-4de8-9445-49259462DCEB}", FactoryType=typeof(SPObjectFactory), ObjectIdentityPropertyName="CanonicalId"), 
SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), 
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true)] 
public class SPWeb : SPSecurableObject, IDisposable 

Cependant, dans les deux versions, la classe ne dispose que des constructeurs internes, tandis que Visual Studio si vous essayez d'hériter laisser de la classe, il ne compilera pas:

Le type « Microsoft.SharePoint .SPWeb » n'a pas défini les constructeurs

0

Je pense que beaucoup de programmeur de modèle d'objet serveur SharePoint est venu à ce problème. Dans un premier temps, je commence simplement par une classe d'aide comme enveloppe pour SPWeb, qui utilise la navigation gérée. Comme l'exigence est devenue plus compliquée, je dois faire face à plus d'un type de SPWeb. Donc, j'ai refacté le code, créer une classe Factory pour instancier SPSite typé et SPWeb. Qui lient un SPWeb avec un terme de métadonnées géré et stockent les informations de type dans la propriété SPWeb et la propriété personnalisée Term.

Je voudrais aider Microsoft à découvrir si c'est un design qui a du sens.Et si cela vaut la peine pour Microsoft de démarrer un projet opensource pour cela. Puisque parfois les programmeurs doivent se concentrer sur la logique métier, ils ne veulent pas implémenter Factory, Abstract Factory encore et encore.

https://social.msdn.microsoft.com/Forums/office/en-US/62c1355f-0b71-49b7-967a-648830bd6dfa/creating-a-factory-class-with-sharepoint-server-side-api-to-instantiate-a-wrapper-class-around#62c1355f-0b71-49b7-967a-648830bd6dfa

Questions connexes