0

1 つのソリューションで 2 つのプロジェクト間で共通の名前空間を共有しようとしています。プロジェクトは「Blueprint」と「Repositories」です。ブループリントには、アプリケーション全体のインターフェースが含まれており、アプリケーション構造のリファレンスとして機能します。

ブループリント プロジェクトには、次の宣言を含むインターフェイスがあります。

namespace Application.Repositories{
    public interface IRepository{
        IEntity Get(Guid id);
    }
}

リポジトリ プロジェクトには、次のクラスのクラスがあります。

namespace Application.Repositories{
    public class STDRepository: IRepository
    {
        STD Get(Guid id){
             return new SkankyExGirlfriendDataContext()
                           .FirstOrDefault<STD>(x=>x.DiseaseId == id);
        }
    }
}

ただし、これは機能しません。Repositories プロジェクトには Blueprint プロジェクトへの参照があります。VS エラーが表示されます:「型または名前空間名 'IRepository' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) - 通常、これは簡単に修正できますが、using ステートメントを追加しても意味がありません。それらは同じ名前空間を持っているので.とにかく試してみましたが、うまくいきませんでした.参照が追加され、そのインターフェイスを参照するコード行がなくても、両方のプロジェクトが正常にコンパイルされました.ここで迷っています.何も見つからなかったので、私がやっていることに根本的に何か問題があると思います...しかし、それが何であるかはわかりません.この問題を解決する方法について、説明またはガイダンスをいただければ幸いです.皆さんが助けてくれることを願っています。

注: この方法でインターフェイスを同じ名前空間に保持する理由は、アプリケーションの完全なアーキテクチャの参照を得るために、すべてのインターフェイスを保持する堅固なプロジェクトが必要だからです。すべてのインターフェースをアプリケーション名前空間ではなく Blueprint.Application 名前空間に配置するなどの回避策を検討しました。ただし、それでは、アプリケーションのほぼすべてのページに using ステートメントを記述する必要があり、指が疲れます。みんなありがとう...

4

3 に答える 3

1

わかりました-だから、彼の答えは正しかったので、私はSLaksを正しいとマークしました. 私の問題は、ソリューション内の他の 6 つのプロジェクト ファイルに関係していました。それらをアンロードし、投稿された 2 つのインスタンスのみでソリューションを再構築したところ、突然 Intellisense が機能し始めました。これら 2 つのプロジェクトにはエラーがありませんでしたが、他のプロジェクトのエラーがコンパイルで何らかの問題を引き起こしていました。くそー...みんなありがとう。

于 2010-06-01T01:10:45.240 に答える
1

これは可能です。

たとえば、mscorlib.dll と System.dll は、System名前空間でクラスを定義する 2 つの異なる C# プロジェクトです。(とりわけ)

このエラーは、Repositoriesプロジェクトが を参照していない場合に発生しますBlueprint

于 2010-06-01T00:32:14.287 に答える
0

アーカイブしようとしているものについては、すべてを 1 つのアセンブリに入れ、すべてのクラスを のinternal代わりにとして宣言することもできますpublic。このようにして、それを使用するプログラムはインターフェースのみを認識します。いくつかのパラメーターに応じて特定のインターフェイスのインスタンスを作成する一連のファクトリ クラスを作成する必要があります。小さなアセンブリは多くのオーバーヘッドを引き起こすため、これが実際に進むべき道です。Microsoft パフォーマンス ガイドラインを参照してください。

于 2010-06-01T01:06:52.180 に答える