私は主なプロジェクトを持っており、2つ目は複数ありUserControls
ます。私はメイン プロジェクトでこのユーザー コントロールを使用します。メイン プロジェクトからUserControls
いくつかのクラス (BusinessLogic
およびを担当DataAccessLayer
) を使用する必要があります。
両方のプロジェクトを接続するには? これで、循環依存が作成されます。
私は主なプロジェクトを持っており、2つ目は複数ありUserControls
ます。私はメイン プロジェクトでこのユーザー コントロールを使用します。メイン プロジェクトからUserControls
いくつかのクラス (BusinessLogic
およびを担当DataAccessLayer
) を使用する必要があります。
両方のプロジェクトを接続するには? これで、循環依存が作成されます。
考えられるアプローチの 1 つは、ユーザー コントロールを実装ではなくサービスの仕様にバインドすることです。
技術的には、これは、メイン プロジェクトと仕様を含むコントロール ライブラリの間で共有される別のライブラリがあることを意味します。
public interface IBusinessLogic
{
void DoSomething();
}
次に、ユーザー コントロール ライブラリでインターフェイスに対してコードを記述し、実装を挿入できるようにします。
public MyControl : UserControl
{
private IBusinessLogic _logic;
public MyControl( IBusinessLogic logic )
{
this._logic = logic;
}
// use the _logic
}
メイン モジュールでは、サービスの実装を提供し、それをコントロールに挿入します。
public MyBusinessLogic : IBusinessLogic { }
MyControl control = new MyControl( new MyBusinessLogic() ); // inject the implementation
BusinessLogic
メインプロジェクトを作成してDataAccessLayer
内部に配置しないでください。それぞれを独自のプロジェクトで作成し、メインプロジェクトから参照します。
注:より良いオフ-DataAccessLayer
からのみ参照する必要がBusinessLogic
あり、メインプロジェクトはからのみ参照する必要がありますBusinessLogic
。
しかし、これは一言で言えばあなたの問題に対する短い答えにすぎません。3層アーキテクチャについて詳しくはこちらを検索することをお勧めします。
ビジネスロジックとデータアクセス層を3番目のプロジェクトに配置します。これを「共通」と呼びます。
両方のプロジェクトから共有ロジックを取り出して、3番目のプロジェクトに入れる必要があると思います。
例:メインプロジェクトにユーザーが制御するロジックも必要な場合は、そのロジックを別のプロジェクトに抽出し、両方のプロジェクトから参照する必要があります。