加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#中两个项目的循环依赖

发布时间:2020-12-15 06:31:42 所属栏目:百科 来源:网络整理
导读:我在一个名为ProjectA(ConsoleApplication)和ProjectB(ClassLibrary)的解决方案中有两个项目. ProjectA参考了ProjectB.一般来说,ProjectA在ProjectB中调用一个方法来做一些事情,并将结果返回给ProjectA.有时候,我需要ProjectB向ProjectA发送一些“附加”信息
我在一个名为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*/
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读