我有一个关于我想在我的应用程序中实现的中介模式的问题(使用C#)。在我的代码中实现模式时,我遇到了循环依赖。类的结构如下:
Mediator
和Colleague
组件/类位于不同的程序集中,并且作为介体模式需要两个组件(类)相互使用。在引用彼此时会出现问题。
请考虑以下代码:
namespace Mediator
{
public abstract class IMediator
{
public IColleague colleague{get;set;}
void Register();
void Send();
}
public class MediatorA:IMediator
{
void Register(){//code here}
void Send(){//code here}
}
}
namespace Colleague
{
public abstract class IColleague
{
IMediator mediator;
void Send();
void Recieve();
}
public class ColleagueA:IColleague
{
void Send(){//code here}
void Recieve(){//code here}
}
}
由于Mediater和同事在不同的命名空间和程序集中,如何解决循环依赖?
答案 0 :(得分:4)
您需要定义包含接口的第三个程序集。恕我直言,没有其他办法。
答案 1 :(得分:2)
如果两个类彼此紧密耦合以实现模式,为什么它们在单独的程序集中?请注意,可以在不具有此类循环依赖性的情况下实现Mediator模式。您通常通过以下两种方式之一来完成此操作:
向Mediator注册委托回调,以便您可以通过各种方式实现“同事”,而无需Mediator需要了解它们。这比过去简单得多,使用匿名方法和lambda表达式来干净地表达回调逻辑。
在与Mediator相同的程序集中提供一些标准的“IColleague”接口,并提供必要的回调,并在使用程序集中定义所需的具体实现。
答案 2 :(得分:1)
我会将IColleague移动到包含中介代码的名称空间/程序集中。假设两者之间没有其他依赖关系。否则,将它们移动到当前所依赖的任何组件。