Можно ли унаследовать от SPWeb?
Можно ли наследовать от классов SharePoint, таких как: SPWeb, SPList и т. Д., Или эти классы запечатаны? Я не мог найти правильный ответ.
Крис
Спасибо за ответы. Рич, ты прав - конструкторы внутренние. Значит, я не могу расширить функциональность этих классов каким-либо образом?
5 ответов
Согласно Reflector, SPWeb не запечатан ни в 2007, ни в 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
Однако в обеих версиях класс имеет только внутренние конструкторы, поэтому, хотя Visual Studio позволит вам попытаться наследовать от класса, он не будет компилироваться:
Тип "Microsoft.SharePoint.SPWeb" не имеет конструкторов
SPWeb и SPList запечатаны в SharePoint 2007, см.: http://blogs.msdn.com/b/francischeung/archive/2008/08/22/unit-testing-sharepoint-2007-applications.aspx
Но они не запечатаны в SharePoint 2010, см.: http://my.safaribooksonline.com/9781435456457/365
Конечно, они могут быть расширены, просто используя методы расширения - http://msdn.microsoft.com/en-us/library/bb383977.aspx
В качестве примера, который я пытаюсь немного продвинуть, вы можете взглянуть на ItemTools, ListTools или другие исходные файлы в https://github.com/kerray/NAVERTICA-SPTools
Согласно их страницам MSDN, классы не запечатаны:
Даже если вы можете наследовать от этих классов, я не вижу в этом смысла, поскольку вы не можете заставить SharePoint использовать их внутри себя.
Возможно, имеет смысл предоставить ваши дополнительные функции с помощью методов расширения, а не наследовать их от базовых классов.
Я думаю, что многие программисты объектной модели сервера SharePoint пришли к этой проблеме.
Сначала я просто начинаю с вспомогательного класса в качестве оболочки для SPWeb, который использует управляемую навигацию.
Поскольку требование стало более сложным, мне приходится иметь дело с более чем одним типом SPWeb. Итак, я изменил код, создав класс Factory для создания экземпляров типизированных SPSite и SPWeb. Которые связывают SPWeb с термином управляемых метаданных и сохраняют информацию о типе как в свойстве SPWeb, так и в пользовательском свойстве Term.
Я хотел бы помочь Microsoft выяснить, имеет ли этот дизайн смысл. И если Microsoft стоит начать проект с открытым исходным кодом для этого. Поскольку иногда программисты должны сосредоточиться на бизнес-логике, они не хотят снова и снова внедрять Factory, Abstract Factory.