2017-12-01 10 views
0

ワンライナーの質問は意味をなさないので、私に詳細に私の挑戦をすることはできません。メンバー。すべてのクラス、型およびメンバーは、それぞれのデフォルトの名前空間(アセンブリ名と同じ)です。C#ネームスペースを複数のアセンブリにまたがる方法それぞれが「内部」クラス、種類の独自のセットを含む、私は3つのDLLを作成している</p> <p>(<strong>MyUtils、MyConnector、myagentという</strong>):

  1. MyAgentはMyConnectorへの参照を追加し、いくつかのクラスを使用する必要があります。 MyConnectorはMyUtilsへの参照を追加し、そのクラスのいくつかを使用する必要があります。 現在、MyAgentはMyUtilsのいくつかのタイプにアクセスする必要があります。

    MyUtilsのすべてのタイプとメンバーが内部であるため、MyConnectorへの参照として、MyConnectorからMyAgentへの参照として追加できません。 DLLを使ってアプリケーションに直接アクセスしたくないので、これらの型をパブリックにする必要はありません。

    理論的には、複数のアセンブリにわたって名前空間を張ることは可能ですが、上記のシナリオを実際にどのように実現するかは明確ではありません。

  2. 最後に、EXEで使用するMyAgent.dllだけを展開します。そのEXEはMyAgentのパブリック・タイプにのみアクセスできる必要がありますが、MyAgentメソッドからはMyConnectionオブジェクト(MyConnectorに含まれるタイプ)が返されます。ここでもまた、私のアクセス指定子(内部)がこの可能性を制限しています。

私は今、完全に混乱しています。経験豊富なプログラマーからの指導に感謝します。

ありがとうございます。アセンブリ1で

file1.cs:assembly2で

namespace MyNamespace { ... } 

file2.cs:

namespace MyNamespace { ... } 

しかし、このwon'を複数のアセンブリの上に名前空間が非常に簡単に行われるスパニング

+0

これはあなたの問題に対する解決策ではありませんが、パブリックタイプのないユーティリティーアセンブリの価値については疑問です。ユーティリティータイプを内部のままにしたい理由について詳しく説明できますか? –

+0

多分私はあまり明確ではありませんでした。最後のdll(MyAgent)にはパブリックタイプもあり、それらはexeが呼び出すものです。しかし、私の必要性は、実装の実装を含む他のすべてのアセンブリの実装の詳細を隠すことでした。それらを一般公開することで、intelliseseリストに不必要なノイズが加わるだけでなく、exe開発者が拒否すべきではないものを思いつくようにすることができます。 –

+0

とにかく、どれくらい公開するべきかについて少し妥協しながら、私が望むものを達成する方法を見つけたと思います。だから、私はこの問題を解決したと考えています。私は新しい道路ブロックを打つことを尋ねます。御時間ありがとうございます。 –

答えて

4

intenalアクセス修飾子を使用すると、同じ内のどのクラスにもメンバーが表示されますアセンブリ、それらの名前空間に関係なく。したがって、assembly1内に2つの名前空間があっても、assembly1.MyNamespaceに宣言された内部メンバーにはアクセスできますが、assembly2.MyNamespaceには存在しません。

だから、にはがあり、他のアセンブリからそれらにアクセスするにはpublicになります。また、別のアセンブリの内部メンバーにもアクセスできる、いわゆる「フレンド・アセンブリ」の名前を付けることもできます。これを行うには、InternalsVisibleTo(fullNameForAssembly2)をコードに追加します。

+0

ああ、はい、内部はアセンブリスコープです!スコープを名前空間に制限する方法はありませんか?私は、私のクラスで私のdllのメソッドを呼び出すユーザーに、それらが想定していないクラスを望んでいません。編集:あなたが言及した代替をチェックアウトします。ありがとう。 –

+1

私の最後の段落を見てください。 internalsvisibleto属性はあなたが探しているものです。 – HimBromBeere

+0

私はあなたに知らせるべきだと思った:私はその属性を使用しなかったが、あなたが投稿したそのリンクから何か新しいことを学んだ。それはしばらくお世話になりました。その間に、私はそれをよりシンプルに保ち、どれくらい公開すべきかについて少し妥協しながら、ほとんど私が望むものを達成しました。だから、私はこの問題を解決したと考えています。私は新しい道路ブロックを打つことを尋ねます。御時間ありがとうございます。 –

関連する問題

 関連する問題