Πώς μπορώ να ορίσετε προσαρμοσμένα τμήματα web.config με τους πιθανούς θυγατρικά στοιχεία και χαρακτηριστικά για τα ακίνητα;

ψήφοι
59

Οι web εφαρμογές που αναπτύσσουν συχνά απαιτούν ρυθμίσεις διαμόρφωσης συν-εξαρτώμενη και υπάρχουν και ρυθμίσεις που πρέπει να αλλάξουν, καθώς προχωράμε μεταξύ καθενός από μας περιβάλλον.

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

Ποιος είναι ο καλύτερος τρόπος για να δημιουργήσετε προσαρμοσμένα τμήματα ρυθμίσεων και τυχόν ειδικές εκτιμήσεις να κάνουν κατά την ανάκτηση των τιμών εκεί;

Δημοσιεύθηκε 05/08/2008 στις 13:13
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
74

Χρησιμοποιώντας χαρακτηριστικά, τα τμήματα του παιδιού ρυθμίσεων και περιορισμών

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

Έχω εδώ παρουσιάζουμε ένα παράδειγμα από τον κώδικα εγώ ο ίδιος χρήση σε μία από τις περιοχές μου. Με ένα εμπόδιο που υπαγορεύουν το μέγιστο ποσό του χώρου στο δίσκο κάθε χρήστης έχει την άδεια να χρησιμοποιήσει.

MailCenterConfiguration.cs:

namespace Ani {

    public sealed class MailCenterConfiguration : ConfigurationSection
    {
        [ConfigurationProperty("userDiskSpace", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 1000000)]
        public int UserDiskSpace
        {
            get { return (int)base["userDiskSpace"]; }
            set { base["userDiskSpace"] = value; }
        }
    }
}

Αυτό έχει συσταθεί στο web.config όπως τόσοι

<configSections>
    <!-- Mailcenter configuration file -->
    <section name="mailCenter" type="Ani.MailCenterConfiguration" requirePermission="false"/>
</configSections>
...
<mailCenter userDiskSpace="25000">
    <mail
     host="my.hostname.com"
     port="366" />
</mailCenter>

στοιχεία Παιδί

Το θυγατρικό στοιχείο XML ταχυδρομείου δημιουργείται στο αρχείο ίδια .cs όπως η παραπάνω. Εδώ έχω προσθέσει περιορισμούς στο λιμάνι. Εάν η θύρα έχει εκχωρηθεί μια τιμή δεν είναι σε αυτό το εύρος και ο χρόνος μεταφοράς θα παραπονεθεί όταν φορτώνεται το config.

MailCenterConfiguration.cs:

public sealed class MailCenterConfiguration : ConfigurationSection
{
    [ConfigurationProperty("mail", IsRequired=true)]
    public MailElement Mail
    {
        get { return (MailElement)base["mail"]; }
        set { base["mail"] = value; }
    }

    public class MailElement : ConfigurationElement
    {
        [ConfigurationProperty("host", IsRequired = true)]
        public string Host
        {
            get { return (string)base["host"]; }
            set { base["host"] = value; }
        }

        [ConfigurationProperty("port", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 65535)]
        public int Port
        {
            get { return (int)base["port"]; }
            set { base["port"] = value; }
        }

Χρήση

Στη συνέχεια να το χρησιμοποιήσετε σχεδόν σε κώδικα, το μόνο που έχετε να κάνετε είναι να υπόσταση της MailCenterConfigurationObject, αυτό θα αυτόματα να διαβάσετε τα σχετικά τμήματα από web.config.

MailCenterConfiguration.cs

private static MailCenterConfiguration instance = null;
public static MailCenterConfiguration Instance
{
    get
    {
        if (instance == null)
        {
            instance = (MailCenterConfiguration)WebConfigurationManager.GetSection("mailCenter");
        }

        return instance;
    }
}

AnotherFile.cs

public void SendMail()
{
    MailCenterConfiguration conf = MailCenterConfiguration.Instance;
    SmtpClient smtpClient = new SmtpClient(conf.Mail.Host, conf.Mail.Port);
}

Έλεγχος για την εγκυρότητα

Έχω ήδη αναφέρει ότι η runtime θα παραπονεθεί όταν η διαμόρφωση είναι φορτωμένο και ορισμένα δεδομένα δεν είναι σύμφωνη με τους κανόνες που έχετε δημιουργήσει (π.χ. MailCenterConfiguration.cs). Έχω την τάση να θέλουν να γνωρίζουν αυτά τα πράγματα, το συντομότερο δυνατόν, όταν το site μου φουντώνει. Ένας τρόπος να λυθεί αυτό είναι να φορτώσετε τις ρυθμίσεις στο _Global.asax.cx.Application_Start_, εάν η ρύθμιση είναι ανίσχυρη θα ειδοποιηθείτε από αυτό με τα μέσα της μια εξαίρεση. Η ιστοσελίδα σας δεν θα ξεκινήσει και αντ 'αυτού θα παρουσιαστούν αναλυτικές πληροφορίες εξαίρεση την κίτρινη οθόνη του θανάτου .

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
Απαντήθηκε 05/08/2008 στις 23:17
πηγή χρήστη

ψήφοι
11

Quick'n Dirty:

Πρώτα δημιουργήστε σας ConfigurationSection και ConfigurationElement κατηγορίες:

public class MyStuffSection : ConfigurationSection
{
    ConfigurationProperty _MyStuffElement;

    public MyStuffSection()
    {
        _MyStuffElement = new ConfigurationProperty("MyStuff", typeof(MyStuffElement), null);

        this.Properties.Add(_MyStuffElement);
    }

    public MyStuffElement MyStuff
    {
        get
        {
            return this[_MyStuffElement] as MyStuffElement;
        }
    }
}

public class MyStuffElement : ConfigurationElement
{
    ConfigurationProperty _SomeStuff;

    public MyStuffElement()
    {
        _SomeStuff = new ConfigurationProperty("SomeStuff", typeof(string), "<UNDEFINED>");

        this.Properties.Add(_SomeStuff);
    }

    public string SomeStuff
    {
        get
        {
            return (String)this[_SomeStuff];
        }
    }
}

Στη συνέχεια, αφήστε το πλαίσιο ξέρουν πώς να χειριστούν τις κατηγορίες τις ρυθμίσεις σας στο Web.config :

<configuration>
  <configSections>
    <section name="MyStuffSection" type="MyWeb.Configuration.MyStuffSection" />
  </configSections>
  ...

Και πραγματικά προσθέσετε το δικό σας παρακάτω ενότητες:

  <MyStuffSection>
    <MyStuff SomeStuff="Hey There!" />
  </MyStuffSection>

Στη συνέχεια, μπορείτε να το χρησιμοποιήσετε στον κώδικά σας ως εξής:

MyWeb.Configuration.MyStuffSection configSection = ConfigurationManager.GetSection("MyStuffSection") as MyWeb.Configuration.MyStuffSection;

if (configSection != null && configSection.MyStuff != null)
{
    Response.Write(configSection.MyStuff.SomeStuff);
}
Απαντήθηκε 05/08/2008 στις 13:51
πηγή χρήστη

ψήφοι
4

Υπάρχει ένα εξαιρετικό παράδειγμα για το MSDN χρήση ConfigurationCollectionκαι .NET 4.5 για τις προσαρμοσμένες ενότητες web.config που έχει μια λίστα στοιχείων ρυθμίσεων.

Απαντήθηκε 19/09/2013 στις 16:39
πηγή χρήστη

ψήφοι
3

Το έθιμο διαμόρφωση είναι πολύ βολικό πράγμα και συχνά εφαρμογές καταλήξετε με ένα αίτημα για μια δυνατότητα επέκτασης λύση.

Για .NET 1.1 διαβάστε το άρθρο http://aspnet.4guysfromrolla.com/articles/020707-1.aspx

Σημείωση: Το παραπάνω διάλυμα λειτουργεί για NET 2,0, καθώς και.

Για NET 2,0 συγκεκριμένη λύση, ανατρέξτε το άρθρο http://aspnet.4guysfromrolla.com/articles/032807-1.aspx

Απαντήθηκε 13/02/2009 στις 14:45
πηγή χρήστη

ψήφοι
2

Μπορείτε να το πετύχετε αυτό με το Τμήμα χειριστές. Υπάρχει μια βασική επισκόπηση για το πώς να γράψετε ένα σε http://www.codeproject.com/KB/aspnet/ConfigSections.aspx ωστόσο αναφέρεται σε app.config ποια θα είναι λίγο πολύ η ίδια όπως γράφει ένα για χρήση στο web. config. Αυτό θα σας επιτρέψει να έχετε ουσιαστικά το δικό σας δέντρο XML στο αρχείο config και να κάνετε κάποια πιο προηγμένη διαμόρφωση.

Απαντήθηκε 05/08/2008 στις 13:25
πηγή χρήστη

ψήφοι
1

Η πιο απλή μέθοδος, η οποία βρήκα, χρησιμοποιεί τμήμα appSettings .

  1. Προσθήκη στο Web.config τα εξής:

    <appSettings>
        <add key="MyProp" value="MyVal"/>
    </appSettings>
    

  2. Η πρόσβαση από τον κωδικό σας

    NameValueCollection appSettings = ConfigurationManager.AppSettings;
    string myPropVal = appSettings["MyProp"];
    

Απαντήθηκε 04/02/2017 στις 17:59
πηγή χρήστη

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