2016-07-08 8 views
1

複数のプロジェクトを持つソリューションがあります。私のソリューションのための唯一の外部インターフェイスになりたいMAINプロジェクトがあります。その中で私はコードを実行し、含まれているプロジェクトの結果を返すメソッドを提供しました。これまでテストアプリケーションが他の内部プロジェクトへの参照を含まずにメソッドを呼び出すことは問題ありませんでした。DLLを使用して内部プロジェクトクラスへのアクセスを提供する方法

しかし私は自分の呼び出しでカスタムクラスを使用しています。これらのクラスは、内部プロジェクトのいずれかに存在し、メソッドにデータを渡すか、メソッドからカスタム応答を受け取るか、カスタムエラーを発生させるために使用されます。これらのクラスは、内部プロジェクトの1つに存在します。私の問題は、クラスが存在するプロジェクトへの参照を含めずに、呼び出し元のアプリケーションで必要なカスタムクラスへの参照を取得する方法を見つけることができないことです。

例として、 main_Projectを通じて消費者:

public class UtilitiesController 
{ 

    public static ShapeVerifyResponse VerifyShape(int shapeId, float[] dimensions) 
    { 
     ShapeVerifyResponse result = null; 
     IValidateShape worker = new clsGraphics(); 

     try 
     {     
      result = worker.VerifyShape(shapeId, dimensions); 
      return result; 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      if (result != null) 
      { 
       result = null; 
      } 
      if (worker != null) 
      { 
       worker = null; 
      } 
     } 

    } 

ShapeVerifyResponseは、私が使用していますすべてのモデルとインタフェースが含まれている別の内部プロジェクトで定義されています。ここでは、そのクラスは次のとおりです。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace BBV2_DomainClasses.Models 
{ 
    public class ShapeVerifyResponse 
    { 
     public float Width { get; set; } // Width of shape 
     public float Height { get; set; } // Height of shape 
     public Boolean edgework { get; set; } // is edgework allowed 
     public ArrayList errorlist { get; set; } // list of errors 

    } 
} 

どのように私は、コンシューマアプリケーションにモデルプロジェクトのクラスを返しメインプロジェクト内のプロパティをコーディングしますか?

+2

"私の問題は、呼び出し元のアプリケーションで必要なカスタムクラスへの参照を、そのクラスが存在するプロジェクトへの参照を含めずに取得する方法を理解できないことです。まあ、できません。クライアントは、そのタイプを含むアセンブリについて知らなくても、そのタイプについて知ることは期待できません。 –

+0

DLLのプロパティを使ってそのアクセスを提供できないようにする必要がありますか? –

+0

あなたはそれが何を意味するのか分かりません。しかし基本的に、クライアントは 'ShapeVerifyResponse'を含むアセンブリへの参照を追加する必要があります。 –

答えて

0

要求と応答のデータを表すすべてのクラスをMAINモジュールに移動する必要があります。サブモジュールのAPIを指定するMAINモジュール内のインターフェースも作成する必要があります。サブモジュールではMAINモジュールを参照し、インタフェースを実装します。

この設計では、サブモジュールはMAINに必要な機能のみを実装しています。すべてのデータ構造とインタフェースはMAINにあります。一部のインターフェイスをクライアントコードに表示しない場合は、internalにし、アセンブリレベルでInternalsVisibleTo属性を使用してライブラリの他のサブモジュールと共有する必要があります(クライアントコードではなく、Make internal classes visible to others assemblies)。

関連する問題