我在一个名为ProjectA(ConsoleApplication)和ProjectB(ClassLibrary)的解决方案中有两个项目. ProjectA参考了ProjectB.一般来说,ProjectA在ProjectB中调用一个方法来做一些事情,并将结果返回给ProjectA.有时候,我需要ProjectB向ProjectA发送一些“附加”信息(更具体地说是在ProjectA中调用Console.WriteLine()方法).要实现这一点,我需要在ProjectB中引用ProjectA,但是当我尝试这样做时,我会收到以下错误:
无法添加对ProjectA的引用.将此项目添加为参考将导致循环依赖.
我理解整个耦合的概念,并且有意义的是得到这个消息,但是,在某些情况下,我需要向ProjectA发送更多的信息.有任何想法吗?
解决方法
我建议你使用事件和听众.例如,您可以通过Trace.WriteLine从ProjectB发送消息,而在ProjectA中,您可以添加跟踪的订阅者. .NET已经提供了一个ConsoleTraceListener类,用于将跟踪消息路由到控制台.您可以通过以下方式从ProjectA添加一个侦听器:
Trace.Listeners.Add(new ConsoleTraceListener());
或者,如果您不想使用集成类,则可以在ProjectB中构建一个非常简单的“源”类,该类将使用Action< string>作为其签名(虽然我建议您为其创建代理),然后从ProjectA订阅.通常,.NET类更灵活.
项目B
public static class MyTrace { public static event Action<string> MessageReceived; internal static void Broadcast(string message) { if (MessageReceived != null) MessageReceived(message); } }
项目A
MyTrace.MessageReceived += s => { /*Operate*/ };