当接口在单独的项目中时处理枚举

8 c# architecture enums interface

我在Visual Studio解决方案中为应用程序提供了以下项目:

  • Common - 实用方法和扩展
  • 实体 - 具有特定于实例的业务逻辑的Rich Domain对象
  • 存储库 - 数据存储库
  • DataServices - 存储库的精简包装器,包含不特定于实例的业务逻辑
  • 接口 - 实体和存储库的所有接口

我将接口放入单独项目的原因是避免循环项目引用.这允许两个项目引用一个公共接口,避免同时引用项目和具体实现.

我故意在Interfaces项目中没有项目引用来避免循环项目引用.我为其他项目中定义的类创建了一个接口,这允许我引用对象接口,而不是其他接口中的具体实现.

所以一个例子是:

namespace Acme.Entities 
{
   public class Person : IPerson
   {
       string Name { get; set; }
   }
}
namespace Acme.Interfaces
{
    public interface IPerson
    {
        string Name { get; set; }
    }
}

namespace Acme.Interfaces
{
    public interface ITeam
    {
        string Name { get; set; }
        IPerson Leader { get; set; }  
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是接口引用另一个项目中定义的枚举.如果不在Interfaces项目下移动Enums,我不知道如何在不创建项目引用的情况下引用Enums,例如:

namespace Acme.Entities 
{
   public enum Status
   {
       Unknown =0,
       Active = 1,
       Active = 2    
   }
} 

namespace Acme.Interfaces
{
    public interface IPerson
    {
        string Name { get; set; }
        Acme.Entities.Status ActiveStatus { get; set; }  
    }
}
Run Code Online (Sandbox Code Playgroud)

除非我引用Acme.Entities项目,否则Acme.Entities.Status将失败,但这将创建一个循环引用,因为Acme.Entities引用了Interfaces项目.

D S*_*ley 9

您必须将枚举定义移动到Interfaces项目或两个项目引用的单独项目.

我个人会将它们保留在同一个项目中 - 只为枚举而单独的项目似乎有点矫枉过正.