1

具体的なオブジェクトを作成するためのファクトリ ライブラリ (プロジェクト) があり、具体的なオブジェクト用の複数のライブラリがあります。

ここで、具体的なオブジェクト ライブラリで Factory Library を呼び出して、別の具体的なオブジェクトを取得する必要があります。しかし、循環依存関係のためにそうすることができません。私はC#を使用しています。

これに対する解決策はありますか?助けていただければ幸いです。

4

2 に答える 2

2

これに対する便利な解決策は、他の 2 つを指すメソッドを配置する 3 番目のプロジェクトを作成することです。

例えば:

プロジェクト A: 工場図書館

プロジェクト B: 具象物

プロジェクト C (新しいもの): プロジェクト B クラスとプロジェクト A ライブラリを使用するメソッド。

一般: 特定のプロジェクトを作成して、循環依存関係を持つクラスを分割します。

それが役に立てば幸い。

アップデート:

X --> A --> B (実績)

問題:

B --> A (循環依存)

解決:

B から呼び出されている A の一部を新しいプロジェクト C (X からも参照する必要があります) に分割します。

X --> A --> B

X --> C

問題解決: B --> C (循環依存なし)

于 2013-04-24T06:08:49.680 に答える
1

インターフェースデザインに挑戦。これを行うには、concrete と factory の両方にインターフェイスを使用します。次にコンストラクタインジェクションを行います。プロパティの注入もできますが、それはあなた次第ですが、コンストラクターの注入の方が優れています。

プロジェクト A : 具体的なオブジェクトとファクトリのインターフェイス

次に、具体的なオブジェクトであるプロジェクト B はプロジェクト A を参照します。すべてのオブジェクトは A から実装されたインターフェイスであり、インターフェイスでのみパラメーターを受け取ります。具体的なオブジェクト内にファクトリを作成する代わりに、ファクトリを注入します。元:

public class ConcreteObjectA : IConcreteObjectA{
  public ConcreteObjectA(IFactoryObjectB factoryB){
    factoryB.Create();
  }
}

次に、ファクトリ オブジェクトであるプロジェクト C はプロジェクト B を参照します。すべてのファクトリはインターフェイスに実装され、インターフェイスのみを返します。元:

public class FactoryObjectB : IFactoryObjectB {
  public IConcreteObjectB Create(){
    return new ConcreteObjectB();
  }
}

クライアントからの使用法は次のようになります。

public void CreateObjectA(){
  FactoryObjectB factory = new FactoryObjectB();
  ConcreteObjectA objectA = new ConcreteObjectA(factory);
}
于 2013-04-24T06:33:45.620 に答える