C # veri açıklaması, belirli bir özelliği genişletemez - olasılıklar nelerdir?

oy
1

ASP.NET Dinamik Veri ile eski bir uygulama oluşturma üzerinde çalışıyorum. Her zamanki gibi modellerin tümü salt okunurdur ve biri görünen adı veya açıklamayı özniteliklerle ayarlayabilir.

Bu iyi çalıştı, ancak, şimdi görünen adı için iki farklı kaynakları (kaynak dosyası ve diğer bazı kaynak) sorgulamak için gereken bir durumda değilim.

Daha önce kod temizdi, çünkü sadece kaynakları sorguladık:

[Display(ResourceType = typeof(Resources.m_Res), Name = M_RES_MIMETYPE_ID, Description = M_RES_MIMETYPE_ID_DESCR)]

Bu tamamen iyiydi ve amaçlandığı gibi çalıştı. Ancak, şimdi ekran adını ve açıklamasını öncelikle başka bir dosyadan almam gerekiyor ve diğer her şey başarısız olursa, kaynaklara geri dönmeliyim.

İki farklı özel özellik, bu şekilde bir şey oluşturmak zorunda kaldım:

    public class MGADisplayName : DisplayNameAttribute
    {
          private readonly string propertyName;
          public string Name { get; set; }
          public Type TableName { get; set; }
          public Type ResourceType { get; set; }

          public MGADisplayName([CallerMemberName] string PropertyName = null)
          {
              propertyName = PropertyName;
          }

          public override string DisplayName
          {
              get
              {
                  var key = (TableName.Name + : + (propertyName ?? Name)).ToLower();
                  if (/* SOME QUERYING */)
                  {
                      return QUERY[key];
                  }
                  else
                  {
                      string property = Resources.m_Res.ResourceManager.GetString(Name);
                      if (property != null)
                      {
                          return property;
                      }
                      else
                      {
                          return Name;
                      }

                  }
              }
          }
    }

Bu tür işler ve sanırım şimdilik sorun değil, ama bir sonraki konu köşede: Display.GroupName ile aynı şeyi yapmam gerekecek.

Şimdi, bildiğim kadarıyla, uzatılacak hiçbir GroupNameAttribute yok, bu yüzden burada karanlıkta.

Ben DisplayAttribute genişletmek isterdim, tam olarak ihtiyacım olan şey olurdu, ama sınıf mühürlü, bu yüzden bir çıkmaz sokak.

Keşke modeli anında değiştirebilsem ve seterler aracılığıyla DisplayName ve Description sağlayabilsem, ancak modelin sadece alıcıları var, bu yüzden başka bir çıkmaz.

Buradaki seçeneklerden yavaşça kaçıyorum. Burada başka neler yapılabilir?

Oluştur 28/04/2020 saat 13:24
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

DisplayAttribute, seald olarak işaretlenmiş olsa da, aşağıdakine benzer bir uzantı yöntemi kullanarak genişletebilirsiniz:

public static class DisplayAttributeExtensions
{
    public static string GetGroupName(this DisplayAttribute display)
    {
        // TODO: your implementation logic
    }
}

Bu uzantı yöntemi tüm DisplayAttribute örnekleri aracılığıyla çağrılabildiğinden, bu durum potansiyel olarak sorununuzu çözebilir.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

Cevap 21/05/2020 saat 20:51
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more