現在、 StructureMapをビジネス レイヤーに統合していますが、双方向の依存関係が原因で問題が発生しています。
レイヤーには複数のマネージャーが含まれており、各マネージャーは相互にメソッドを呼び出すことができます。通信に関する制限やルールはありません。これには、以下の例のような循環依存関係も含まれます。設計自体に問題があることは承知していますが、現在はStructureMapを機能させたいだけであり、将来的にはさらなるリファクタリングに注力する予定です。
すべてのマネージャーは次のIManager
インターフェースを実装します。
internal interface IManager
{
bool IsStarted { get; }
void Start();
void Stop();
}
また、独自の特定のインターフェイスもあります。
internal interface IManagerA : IManager
{
void ALogic();
}
internal interface IManagerB : IManager
{
void BLogic();
}
2 つのダミー マネージャーの実装を次に示します。
internal class ManagerA : IManagerA
{
public IManagerB ManagerB { get; set; }
public void ALogic() { }
public bool IsStarted { get; private set; }
public void Start() { }
public void Stop() { }
}
internal class ManagerB : IManagerB
{
public IManagerA ManagerA { get; set; }
public void BLogic() { }
public bool IsStarted { get; private set; }
public void Start() { }
public void Stop() { }
}
これが私が現在使用している StructureMap 構成です。
マネージャーを登録する方法がまだわからないので、現在は手動登録を使用しています。多分誰かがこれで私を助けることができます。
For<IManagerA>().Singleton().Use<ManagerA>();
For<IManagerB>().Singleton().Use<ManagerB>();
SetAllProperties(convention =>
{
// configure the property injection for all managers
convention.Matching(prop => typeof(IManager).IsAssignableFrom(prop.PropertyType));
});
結局、 StructureMapはとの間の循環依存関係について不平を言うIManagerA
ため、作成できません。この問題を解決し、現在の設計を維持するための簡単でクリーンな解決策はありますか?ManagerA
ManagerB