C# 引用接口(API)项目内部的枚举?

C# 引用接口(API)项目内部的枚举?,c#,.net,design-patterns,software-design,C#,.net,Design Patterns,Software Design,一段时间以来,我一直在一个解决方案中处理两个项目AppName和AppName.API。API存储我的所有接口,而AppName存储与解决方案相关的所有其他内容 我的项目已经到了一个阶段,我不确定我能在这里做些什么。我需要在AppName中的类中引用AppName中的枚举,但该类具有AppName.API 这意味着AppName.API必须访问此枚举。如果我不能在AppName.API中引用AppName,我该怎么办 一些人建议使用AppName.Common,但这也引用了AppName.API

一段时间以来,我一直在一个解决方案中处理两个项目
AppName
AppName.API
。API存储我的所有接口,而AppName存储与解决方案相关的所有其他内容

我的项目已经到了一个阶段,我不确定我能在这里做些什么。我需要在
AppName
中的类中引用
AppName
中的枚举,但该类具有
AppName.API

这意味着
AppName.API
必须访问此枚举。如果我不能在
AppName.API
中引用
AppName
,我该怎么办


一些人建议使用
AppName.Common
,但这也引用了
AppName.API
,因此我无法在API项目中引用它。我真的需要制作一个AppName.Enums
把它放到AppName.API中吗。因为您需要AppName.API项目和AppName都能看到它,所以请将它放在那里。老实说,给这只猫剥皮有一百万种方法


创建一个名为“AppName.Enum”的新项目,并将它们全部放在其中,然后在AppName和AppName.API中引用AppName.Enum。

我通常使用的结构是一个
AppName.Model
,在其中放置所有模型、Enum等。纯类,没有其他

然后,您可以从所有其他地方引用此库。这意味着您可以从
AppName.API
AppName
AppName.Common

中引用它,正如M Moore所说,“可以有一百万种方法来剥这只猫的皮”

您的方法的方向主要由项目的目标、所需的资源和项目的未来决定

以下是三种方法:

i、 )松散耦合的项目层-用于复杂业务模型/企业应用程序的分层

AppName.Domain.Model
AppName.Domain.Enum
AppName.Domain.Constant
AppName.Data.Repository
AppName.Data.Service
AppName.Business.Logic
AppName.Business.Helper
AppName.Web
AppName.Api
AppName.Mobile.Android
AppName.Mobile.iOS
AppName.Domain
AppName.Data
AppName.Business
AppName.Shared
ii.)通用项目分层-在许多业务应用程序中使用的分层

AppName.Domain.Model
AppName.Domain.Enum
AppName.Domain.Constant
AppName.Data.Repository
AppName.Data.Service
AppName.Business.Logic
AppName.Business.Helper
AppName.Web
AppName.Api
AppName.Mobile.Android
AppName.Mobile.iOS
AppName.Domain
AppName.Data
AppName.Business
AppName.Shared
iii.)整体独立项目-可通过文件夹结构应用分层

AppName

您是否考虑过将枚举与接口一起放入API中?这似乎是一个合理的地方。请记住,枚举不必由类托管。它们可以简单地在名称空间中实现。在AppName.API名称空间中创建一个类文件(.cs),可以随意调用它(可能是Enums.cs),从中删除类代码,只保留名称空间,然后在其中创建枚举。然后任何使用AppName.API的东西都可以访问它们,包括AppName.API命名空间中的类(继续Kevin的评论)…或者更好的方法,将每个枚举保存在一个单独的文件中,这样每个枚举都可以独立地进行版本控制,并且易于查找。我真的不喜欢与
AppName.API
项目相矛盾,不只是接口冲突,而是枚举冲突,我知道你的来龙去脉。我对这类事情有超级强迫症,但我认为最好的办法是将它们放在一个名为
AppName.Enum
的新项目中。感谢大家的评论和回答。因此,您的答案是创建
AppName.Enum
?如果项目的内容(AppName.Enum)需要在多个项目中共享,那么创建AppName.Enum是一个不错的方法