Solução alternativa
Na minha empresa, evitamos "pular projetos" para chegar a projetos de nível inferior não comuns. Por exemplo, nossa camada de apresentação / API só pode fazer referência a nossa camada de domínio e a camada de domínio pode fazer referência apenas à camada de dados.
No entanto, esse é um problema quando há enumerações que precisam ser referenciadas pelas camadas de apresentação e domínio.
Aqui está a solução que implementamos (até agora). É uma solução muito boa e funciona bem para nós. As outras respostas estavam acertando tudo isso.
A premissa básica é que enums não podem ser herdadas - mas classes podem. Assim...
// In the lower level project (or DLL)...
public abstract class BaseEnums
{
public enum ImportanceType
{
None = 0,
Success = 1,
Warning = 2,
Information = 3,
Exclamation = 4
}
[Flags]
public enum StatusType : Int32
{
None = 0,
Pending = 1,
Approved = 2,
Canceled = 4,
Accepted = (8 | Approved),
Rejected = 16,
Shipped = (32 | Accepted),
Reconciled = (64 | Shipped)
}
public enum Conveyance
{
None = 0,
Feet = 1,
Automobile = 2,
Bicycle = 3,
Motorcycle = 4,
TukTuk = 5,
Horse = 6,
Yak = 7,
Segue = 8
}
Então, para "herdar" as enumerações em outro projeto de nível superior ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
Isso tem três vantagens reais ...
- As definições de enumeração são automaticamente as mesmas nos dois projetos - por definição.
- Quaisquer alterações nas definições de enumeração são ecoadas automaticamente na segunda sem precisar fazer modificações na segunda classe.
- As enumerações são baseadas no mesmo código - para que os valores possam ser facilmente comparados (com algumas ressalvas).
Para referenciar as enumerações no primeiro projeto , você pode usar o prefixo da classe: BaseEnums.StatusType.Pending ou adicionar um "using static BaseEnums;" declaração para seus usos.
No segundo projeto, ao lidar com a classe herdada, no entanto, não consegui trabalhar com a abordagem "using static ..." , portanto todas as referências às "enumerações herdadas" seriam prefixadas com a classe, por exemplo, SubEnums.StatusType.Pending . Se alguém tiver uma maneira de permitir que a abordagem "usando estática" seja usada no segundo projeto, informe-me.
Estou certo de que isso pode ser aprimorado para torná-lo ainda melhor - mas isso realmente funciona e eu usei essa abordagem em projetos de trabalho.
Faça um voto positivo se achar útil.