SPWeb、SPList などの SharePoint クラスから継承することは可能ですか、それともこのクラスは封印されていますか? 正解が見つかりませんでした。
クリス
返信ありがとうございます。リッチ、あなたは正しいです - コンストラクターは内部です。つまり、これらのクラスの機能をエレガントな方法で拡張できなかったということですか?
SPWeb、SPList などの SharePoint クラスから継承することは可能ですか、それともこのクラスは封印されていますか? 正解が見つかりませんでした。
クリス
返信ありがとうございます。リッチ、あなたは正しいです - コンストラクターは内部です。つまり、これらのクラスの機能をエレガントな方法で拡張できなかったということですか?
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' にはコンストラクターが定義されていません
もちろん、拡張メソッドを使用するだけで拡張できます - http://msdn.microsoft.com/en-us/library/bb383977.aspx
私が少しプッシュしようとしている例として、https: //github.com/kerray/NAVERTICA-SPTools にある ItemTools、または ListTools またはその他のソース ファイルを見ることができます。
多くの SharePoint サーバー オブジェクト モデル プログラマーがこの問題に直面したと思います。
まず、Managed Navigation を使用する SPWeb のラッパーとしてのヘルパー クラスから始めます。
要件が複雑になるにつれて、複数の種類の SPWeb を処理する必要があります。そこで、コードを作り直し、Factory クラスを作成して、型指定された SPSite と SPWeb をインスタンス化しました。管理されたメタデータ用語で SPWeb をバインドし、型情報を SPWeb プロパティと Term カスタム プロパティの両方に格納します。
これが理にかなった設計であるかどうかを Microsoft が確認できるように支援したいと思います。そして、マイクロソフトがこのためにオープンソース プロジェクトを開始する価値があるかどうか。プログラマーはビジネス ロジックに集中しなければならない場合があるため、Factory や Abstract Factory を何度も実装したくありません。
MSDN ページによると、クラスは封印されていません。
これらのクラスから継承できるかもしれませんが、SharePoint にそれらを内部的に使用させることはできないため、私には意味がわかりません。
基本クラスから実際に継承するよりも、拡張メソッドを介して追加機能を提供する方が理にかなっている場合があります。
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を参照してください。