2

.NETでコンポーネントを作成しました。これは、他社や開発チームの複数の.NETソリューションで使用することを目的としています。

私のコンポーネントは複数のDLLで構成されています。大まかに、それは持っています:

  • 多くの操作を行うことができるコアDLL、および
  • これらの操作のごく一部を提供するファサードDLL。これにより、コンポーネントをさまざまな顧客や統合に合わせてカスタマイズできます。

重要なのは、誰もがコアメソッドにアクセスできるようにしたくはなく、ファサードメソッドにのみアクセスできるようにすることです。このようにして、ファサードメソッドではなく、コアメソッドを直接呼び出して不正行為を試みないようにします。

それを達成することは可能ですか?このようなカプセル化を実現するためのパターンやグッドプラクティスはありますか?

4

2 に答える 2

3

コアタイプのアクセス修飾子を作成し、internalを利用して独自のアセンブリ間で実装をInternalsVisibleToAttribute共有します。internalこの属性により、ファサードDLLがコア内部にアクセスできるようになります。

ただし、これによって、決心した人がリフレクションを使用するのを止めることはできません。それが何をするかによって、アクセスを取得することは簡単ではありません。これは通常、ほとんどの人を公に公開されているタイプに誘導するのに十分です。

また、アセンブリを公開する際の内部に関するドキュメントが不足していると、人々を思いとどまらせることになります。これは、パブリックタイプ向けの非常に優れたドキュメントと相まって。

人々があなたのアセンブリをどのように使用しようとしているのかを常に見るのが賢明でしょう。コアには、有用であるか、またはあなたが考えていなかった用途があるために人々が大いに好むタイプがあるかもしれません-消費者の需要を満たすためにファサードを通してこれらを公開する準備をしてください。

于 2012-05-30T08:41:07.353 に答える
1

すべてのコアパブリックメソッド/メンバーなどをinternalに変更してから、 InternalsVisibleToAttributeを使用して、すべての内部アイテムをファサードに表示できます。

別の方法は、 StrongNameIdentityPermissionAttributeを使用することです。

発信者(直接の発信者またはコールチェーンの上位の発信者)が特定の強力な名前で署名されていることを確認します。 (これは意図したとおりに機能しなくなります)

于 2012-05-30T08:42:04.190 に答える