我的C#项目中的循环引用

Ale*_*lex 12 c# circular-dependency

我有以下情况:

  1. 一个项目MyCompany.MyProject.Domain包含我的域模型,以及部分类(如Contact).

  2. 我希望'扩展'(通过部分类,而不是扩展方法)我的Contact类具有一个属性Slug,它将为我提供一个简单的URL友好文本表示的名字和姓氏.

  3. 我有一个字符串扩展方法ToSlug()在我Utility的项目MyCompany.MyProject.Utilities这不正是我想要2).

  4. 问题:我的Utility项目已经引用了我的Domain项目,这意味着我无法让Domain项目看到Utility项目的ToSlug()方法而不会导致循环引用.

我并不热衷于创建另一个项目来解决这个问题,我真的希望保持Slug逻辑共享.

我怎么解决这个问题?

Eri*_*ith 14

你的Utility项目引用您的MyCompany.MyProject.Domain似乎有点像一个代码味道的.我在这里假设这些是在领域对象具体工作的实用程序-如果是这样的话,那么你为什么不包括MyCompany.MyProject.Utilities你的内部Domain项目(当然,相应地修改命名空间)?

在任何情况下,打破这些依赖关系的常规方法是将一个项目所需的内容抽象为一组接口,并将它们封装在单独的程序集中.在此之前,请确保您在概念上做的事情是正确的.

但是,在您的特定情况下,请考虑引入一个界面,即INameHolder:

public interface INameHolder
{
    string FirstName { get; set; }
    string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后Contact实现INameHolder. INameHolder存在于另一个程序集中,我们称之为MyCompany.MyProject.Domain.Interfaces.

然后你的Utilities项目引用Interfaces(不是 Domain),所以Domain,但Interfaces没有引用任何东西 - 循环引用被打破.