Alternatif çözüm
Şirketimde, ortak olmayan alt düzey projelere ulaşmak için "projelerin üstünden atlamaktan" kaçınıyoruz. Örneğin, sunu / API katmanımız yalnızca alan katmanımıza referans verebilir ve alan katmanı yalnızca veri katmanına referans verebilir.
Ancak, hem sunu hem de etki alanı katmanları tarafından başvurulması gereken numaralandırmalar olduğunda bu bir sorundur.
İşte şimdiye kadar uyguladığımız çözüm. Oldukça iyi bir çözüm ve bizim için iyi çalışıyor. Diğer cevaplar tüm bunlara çarpıyordu.
Temel öneri, numaralandırmaların miras alınamayacağıdır - ancak sınıflar olabilir. Yani...
// 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
}
Sonra, başka bir üst düzey projede numaralarını devralmak için ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
Bunun üç gerçek avantajı var ...
- Numaralandırma tanımları her iki projede de otomatik olarak aynıdır - tanım gereği.
- Numaralandırma tanımlarında yapılan herhangi bir değişiklik, ikinci sınıfta herhangi bir değişiklik yapmak zorunda kalmadan otomatik olarak ikincisinde yankılanır.
- Numaralandırmalar aynı koda dayanır - böylece değerler kolayca (bazı uyarılarla) karşılaştırılabilir.
Çeteleler başvurmak için ilk proje , sınıfın öneki kullanabilirsiniz: BaseEnums.StatusType.Pending veya eklenti bir "statik BaseEnums kullanarak;"ifadelerini kullanın.
Gelen ikinci proje ancak kalıtsal sınıf ile uğraşan, ben alamadım "statik kullanarak ..." "miras çeteleler" yapılan tüm başvurular sınıfın öneki olacağını, böylece işe yaklaşımı, örneğin SubEnums.StatusType.Pending . Herkes "statik kullanarak" izin vermek için bir yol bulursa ikinci projede yaklaşımının , bana bildirin.
Bunu daha da iyi hale getirmek için ayarlanabileceğinden eminim - ama bu gerçekten işe yarıyor ve bu yaklaşımı çalışma projelerinde kullandım.
Yararlı bulursanız lütfen bunu yukarı oylayın.