私はあなたがサードパーティのクラスを中心に、独自のファサードを構築することができるかどうかについては説明しません。以前の著者はそうです、ライブラリはこれを許さない方法で設計することができます。特定の順序で初期化する必要のあるシングルトンを持つ結合クラスがいくつかあるとします。サードパーティの開発者が気にすることのない設計ミス(または機能)がたくさんあるかもしれません。その方法で彼らの図書館。あなたはの周りにラッパーを書く必要がありますが、あまりにも多くの方法がありますし、これをするのは良くありません手動で
私はまさにその問題
1に対処するための3つのソリューションを参照してください)私はあなたがすべき .NET 4.0の新しい「ダイナミック」タイプは、あなたが「コードのエーカーを」記述することなく、その問題を回避できるようになると仮定第三者クラスのインスタンスを動的キーワード を持つprivareメンバとしてクラスにカプセル化します。クラスはDynamicから派生するか、IDynamicObjectインターフェイスを実装する必要があります。あなたは#4.0 C、まあサードパーティのクラスのカプセル化されたインスタンスへのすべての呼び出し
を転送しますGetMember/SetMember機能を実装する必要がありますのは、他のソリューションに見てみましょう、未来である:
2)のコードを記述しないでください。かなりの数のパブリックメソッドがある場合は手動で(100以上)私は、リフレクションを使用してすべてのパブリックメンバーを見つけて、カプセル化されたインスタンスを呼び出すためのコードを自動的に生成する小さなコンソールアプリケーションを作成します。例
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3)のためにあなたはなく、例えば、レッドゲート.NETリフレクターのための既存の反射ツールの助けを借りて、2と同じことを行うことができます。それは、すべてのクラスとメソッドの署名をリストするのに役立ちます。次に、これをWordに貼り付けて、単純なVBマクロを使用して、2と同じコードを生成させます。 備考:コードをコピーせずにメソッドシグネチャをコピーするとすぐに公開されます私はあなたがライセンス契約に違反するとは思わないが、とにかくそれは再チェックする価値がある
パート1:http://blogs.msdn.com/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx –
パート2:http://blogs.msdn .com/ericlippert/archive/2008/10/06/prevent-third-party-derivation-part-two.aspx –