我目前在我们的业务层中集成了StructureMap,但由于双向依赖关系而出现问题。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();
}
这里有两个虚拟管理器实现:
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 c我现在使用的配置。
我仍然不确定我应该如何注册管理员,所以目前我正在使用手动注册。也许有人可以帮我解决这个问题。
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));
});
毕竟我不能创建IManagerA
因为StructureMap抱怨ManagerA
和ManagerB
之间的循环依赖。有没有一个简单而干净的解决方案来解决这个问题,但保持当前的设计?