Solusi alternatif
Di perusahaan saya, kami menghindari "melompati proyek" untuk mencapai proyek tingkat rendah yang tidak umum. Misalnya, lapisan presentasi / API kami hanya dapat mereferensikan lapisan domain kami, dan lapisan domain hanya dapat mereferensikan lapisan data.
Namun, ini merupakan masalah ketika ada enum yang perlu direferensikan oleh presentasi dan lapisan domain.
Inilah solusi yang telah kami terapkan (sejauh ini). Ini adalah solusi yang cukup bagus dan bekerja dengan baik untuk kita. Jawaban lain mengenai semua ini.
Premis dasarnya adalah bahwa enum tidak dapat diwarisi - tetapi kelas dapat. Begitu...
// 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
}
Kemudian, untuk "mewarisi" enum di proyek tingkat yang lebih tinggi ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
Ini memiliki tiga keunggulan nyata ...
- Definisi enum secara otomatis sama di kedua proyek - menurut definisi.
- Setiap perubahan pada definisi enum secara otomatis digaungkan di detik tanpa harus membuat modifikasi ke kelas kedua.
- Enum didasarkan pada kode yang sama - sehingga nilainya dapat dengan mudah dibandingkan (dengan beberapa peringatan).
Untuk referensi enum di proyek pertama , Anda bisa menggunakan awalan kelas: BaseEnums.StatusType.Pending atau tambahkan "using static BaseEnums;"pernyataan untuk usings Anda.
Namun dalam proyek kedua ketika berhadapan dengan kelas yang diwarisi, saya tidak bisa mendapatkan pendekatan "using static ..." untuk bekerja, jadi semua referensi ke "enum yang diwariskan" akan diawali dengan kelas, misalnya SubEnums.StatusType.Pending . Jika ada yang datang dengan cara untuk memungkinkan "menggunakan statis" untuk digunakan dalam proyek kedua, beri tahu saya.
Saya yakin ini bisa diubah untuk membuatnya lebih baik - tetapi ini benar-benar berfungsi dan saya telah menggunakan pendekatan ini dalam proyek-proyek yang sedang berjalan.
Harap pilih ini jika Anda merasa terbantu.