Ο σχολιασμός δεδομένων C #, δεν μπορεί να επεκτείνει ένα συγκεκριμένο χαρακτηριστικό - ποιες είναι οι δυνατότητες;

ψήφοι
1

Εργάζομαι σε μια παλιά έκδοση εφαρμογών με ASP.NET Dynamic Data. Τα μοντέλα, όπως συνήθως, είναι όλα μόνο για ανάγνωση και μπορεί κανείς να ορίσει το εμφανιζόμενο όνομα ή περιγραφή μέσω χαρακτηριστικών.

Αυτό λειτούργησε καλά, ωστόσο, τώρα είμαι σε μια κατάσταση όπου πρέπει να ζητήσω δύο διαφορετικές πηγές (αρχείο πόρου και κάποια άλλη πηγή) για το εμφανιζόμενο όνομα.

Ο κωδικός πριν ήταν καθαρός, επειδή ρωτήσαμε μόνο τους πόρους:

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

Αυτό ήταν εντάξει και λειτούργησε όπως ήταν σκόπιμο. Ωστόσο, τώρα πρέπει να λάβω πρώτα το εμφανιζόμενο όνομα και την περιγραφή από κάποιο άλλο αρχείο και εάν όλα τα άλλα αποτύχουν, πρέπει να επιστρέψω στους πόρους.

Έπρεπε να δημιουργήσω δύο διαφορετικά προσαρμοσμένα χαρακτηριστικά, κάτι με αυτόν τον τρόπο:

    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;
                      }

                  }
              }
          }
    }

Αυτό το είδος λειτουργεί και υποθέτω ότι είναι εντάξει προς το παρόν, αλλά το επόμενο ζήτημα είναι πολύ κοντά: Θα πρέπει να κάνω το Display.GroupName το ίδιο.

Τώρα, όσο γνωρίζω, δεν υπάρχει κανένα GroupNameAttribute για επέκταση, οπότε είμαι κάπως στο σκοτάδι εδώ.

Μακάρι να μπορούσα να επεκτείνω το DisplayAttribute, θα ήταν ΑΚΡΙΒΩΣ αυτό που χρειάζομαι, αλλά η τάξη είναι σφραγισμένη, οπότε αυτό είναι αδιέξοδο.

Μακάρι να μπορούσα να αλλάξω το μοντέλο εν κινήσει και να παρέχω το DisplayName και την περιγραφή μέσω των ρυθμιστών, αλλά το μοντέλο έχει μόνο getter, οπότε αυτό είναι ένα άλλο αδιέξοδο.

Τρέχω αργά από τις επιλογές εδώ. Τι άλλο μπορεί να γίνει εδώ;

Δημοσιεύθηκε 28/04/2020 στις 13:24
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Παρόλο που το DisplayAttribute επισημαίνεται ως seald, μπορείτε να το επεκτείνετε χρησιμοποιώντας μια μέθοδο επέκτασης, κάτι σαν το εξής:

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

Αυτό μπορεί ενδεχομένως να λύσει το πρόβλημά σας, καθώς αυτή η μέθοδος επέκτασης μπορεί να κληθεί μέσω όλων των παρουσιών DisplayAttribute.

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

Απαντήθηκε 21/05/2020 στις 20:51
πηγή χρήστη

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