Как я определяю пользовательские разделы web.config с потенциальными дочерними элементами и атрибутами для свойств?

df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = ['UK','China']

реализовать в:

df[df.countries.isin(countries)]

реализовать не так, как в странах покоя:

df[df.countries.isin([x for x in np.unique(df.countries) if x not in countries])]
66
задан Chris 23 August 2008 в 18:09
поделиться

4 ответа

Используя атрибуты, дочерние разделы конфигурации и ограничения

существует также возможность использовать атрибуты, который автоматически заботится об инфраструктуре, а также обеспечении способности легко добавить ограничения.

я здесь представляю пример от кода, который я использую сам в одном из моих сайтов. С ограничением я диктую максимальное количество дискового пространства, которое любому пользователю разрешают использовать.

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 файле как тот выше. Здесь я добавил ограничения на порт. Если порту присвоят значение не в этом диапазоне, то время выполнения будет жаловаться, когда конфигурация будет загружена.

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

на законность

я ранее упомянул, что время выполнения будет жаловаться, когда конфигурация будет загружена, и некоторые данные не соответствуют правилам, которые Вы настроили (например, в MailCenterConfiguration.cs). Я склонен хотеть знать эти вещи как можно скорее, когда мой сайт разжигает. Одним способом решить это является загрузка конфигурация в _Global.asax.cx. Application_Start_, если конфигурация недопустима, Вы будете уведомлены относительно этого со средствами исключения. Ваш сайт не запустится, и вместо этого Вы будете представлены подробная информация об исключении в экран Yellow смерти .

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
80
ответ дан Tim S. Van Haren 7 November 2019 в 11:14
поделиться

Грязный Quick'n:

Первый создают Ваш 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];
        }
    }
}

Тогда сообщает платформе, как обработать Ваши классы конфигурации в [1 111] 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);
}
12
ответ дан Ishmaeel 7 November 2019 в 11:14
поделиться

Пользовательская конфигурация является довольно удобной вещью, и часто приложения заканчиваются со спросом на растяжимое решение.

Для.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

4
ответ дан 7 November 2019 в 11:14
поделиться

Можно выполнить это с Обработчиками Разделов. Существует основной обзор того, как записать один в http://www.codeproject.com/KB/aspnet/ConfigSections.aspx однако, он относится к app.config, который был бы в значительной степени тем же как записью той для использования в web.config. Это позволит Вам по существу иметь свое собственное дерево XML в файле конфигурации и реализовывать еще некоторую усовершенствованную конфигурацию.

3
ответ дан John Downey 7 November 2019 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: