대체 솔루션
우리 회사에서는 일반적이지 않은 하위 레벨 프로젝트에 도달하기 위해 "프로젝트를 뛰어 넘다"는 것을 피합니다. 예를 들어 프레젠테이션 / API 계층은 도메인 계층 만 참조 할 수 있으며 도메인 계층은 데이터 계층 만 참조 할 수 있습니다.
그러나 이는 프레젠테이션 및 도메인 계층 모두에서 참조해야하는 열거 형이있을 때 문제가됩니다.
여기에 지금까지 구현 한 솔루션이 있습니다. 그것은 꽤 좋은 해결책이며 우리에게 잘 작동합니다. 다른 대답은이 주위에 치고 있었다.
기본 전제는 열거 형을 상속 할 수 없지만 클래스는 상속 할 수 없다는 것입니다. 그래서...
// 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
}
그런 다음 다른 상위 프로젝트에서 열거를 "상속"합니다.
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
이것은 세 가지 장점이 있습니다 ...
- 열거 정의는 두 프로젝트 모두에서 자동으로 동일합니다.
- 열거 형 정의에 대한 변경 사항은 두 번째 클래스를 수정하지 않고도 두 번째에 자동으로 반영됩니다.
- 열거 형은 동일한 코드를 기반으로하므로 값을 쉽게 비교할 수 있습니다 (몇 가지주의 사항이 있음).
첫 번째 프로젝트 에서 열거 형을 참조하려면 클래스의 접두사를 사용하십시오. BaseEnums.StatusType.Pending 또는 "정적 BaseEnums 사용"; 당신의 사용에 진술.
에서 두 번째 프로젝트 그러나 상속 클래스를 처리, I는 얻을 수 없었다 "정적을 사용하여 ..." 은 "상속 열거 형"에 대한 모든 참조가 클래스로 시작 될 수 있도록 작업에 대한 접근 방식을, 예를 들어 SubEnums.StatusType.Pending . 사람이 할 수있는 방법과 함께 오면 "을 사용하여 정적" 접근 방식은 두 번째 프로젝트에 사용되는, 알려주세요.
나는 이것이 더 나아질 수 있도록 조정할 수 있다고 확신하지만 실제로 작동하며 작업중 인 프로젝트 에서이 접근법을 사용했습니다.
도움이 될 경우 투표하십시오.