具体的なオブジェクトを作成するためのファクトリ ライブラリ (プロジェクト) があり、具体的なオブジェクト用の複数のライブラリがあります。
ここで、具体的なオブジェクト ライブラリで Factory Library を呼び出して、別の具体的なオブジェクトを取得する必要があります。しかし、循環依存関係のためにそうすることができません。私はC#を使用しています。
これに対する解決策はありますか?助けていただければ幸いです。
具体的なオブジェクトを作成するためのファクトリ ライブラリ (プロジェクト) があり、具体的なオブジェクト用の複数のライブラリがあります。
ここで、具体的なオブジェクト ライブラリで Factory Library を呼び出して、別の具体的なオブジェクトを取得する必要があります。しかし、循環依存関係のためにそうすることができません。私はC#を使用しています。
これに対する解決策はありますか?助けていただければ幸いです。
これに対する便利な解決策は、他の 2 つを指すメソッドを配置する 3 番目のプロジェクトを作成することです。
例えば:
プロジェクト A: 工場図書館
プロジェクト B: 具象物
プロジェクト C (新しいもの): プロジェクト B クラスとプロジェクト A ライブラリを使用するメソッド。
一般: 特定のプロジェクトを作成して、循環依存関係を持つクラスを分割します。
それが役に立てば幸い。
アップデート:
X --> A --> B (実績)
問題:
B --> A (循環依存)
解決:
B から呼び出されている A の一部を新しいプロジェクト C (X からも参照する必要があります) に分割します。
X --> A --> B
X --> C
問題解決: B --> C (循環依存なし)
インターフェースデザインに挑戦。これを行うには、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);
}