私はBaseComponent
クラスとBaseManager
クラスの2つのジェネリッククラスを持っています。円ジェネリック型パラメータ
これらはいずれも抽象的なものであり、具体的に意図されています。
public abstract class BaseManager<T> where T : BaseComponent<?>
public abstract class BaseComponent<T> where T : BaseManager<?>
BaseManager
私はそれが一般的なようにしたい理由である、BaseComponentsのリストを持っているので、PhysicsManager : BaseManager<PhysicsComponent>
はPhysicsComponents
のリストを持っているでしょう。
私はBaseComponent
から派生したクラスを適切なマネージャーに欲しいと思っているだけなので、BaseComponent
が一般的であることを望みたいです。理想的には、派生コンポーネントごとにコンストラクタを書く必要がないので、渡された具象マネージャクラスにコンストラクタを追加することができます。理想的には、私は、抽象的なBaseManager
クラスを取るコンストラクタをしたいです。
どのようにこの種の循環依存性を管理できますか?
循環依存性を避けるために再設計することを強く検討します。たとえば、 'BaseComponent'を非ジェネリックにします。それは 'IManager'に依存していますか? 'BaseManager' –
の 'BaseComponent'から' TComponent'へのキャストを入れてください。Jonが指摘しているように少し臭いがあると私は同意しますが、私はそれほどフォローしません。 'BaseComponent'が' IManager'に依存している場合、 'BaseComponent'のすべての派生クラスに正しい具体的な' IManager'実装を受け入れたコンストラクタがあるようにして、マネージャのリストに追加することはできますか?あなたが時間を持っていれば、私は答えの精緻化に感謝します。 –