我目前正在将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配置。
我仍然不确定我应该如何注册经理,所以目前我正在使用手动注册。也许有人也可以帮助我。
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
。是否有一个简单而干净的解决方案来解决这个问题,但要保持当前的设计?