Перезагрузка конфигурации, не перезапуская использование приложения ConfigurationManager. RefreshSection

К сожалению, это стандартное поведение LassoSelectTool. Однако я могу предложить вам хороший обходной путь, который скроет глифы, если их точки не выбраны. Затем вы можете использовать ResetTool, чтобы показать их обратно. Я надеюсь, что это сработает для вас.

import pandas as pd
from bokeh.palettes import Spectral4
from bokeh.models import LassoSelectTool, ResetTool, CustomJS, LegendItem, Legend, ColumnDataSource
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG

p = figure(plot_width = 800, plot_height = 250,
           tools = ('pan,reset'),
           x_axis_type = "datetime")
p.title.text = 'Click on legend entries to mute the corresponding lines'

sources = []
backup_colors = []
stocks = ["AAPL", "IBM", "MSFT", "GOOG"]
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], stocks, Spectral4):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    sources.append(ColumnDataSource(dict(x = df['date'], y = df['close'], color = len(df['close'].values) * [color])))
    backup_colors.append(len(df['close'].values) * [color])

renderers = []
for index, name in enumerate(['AAPL', 'IBM', 'MSFT', 'GOOG']):
    source = sources[index]
    renderers.append(p.circle(x = 'x',
                              y = 'y',
                              color = 'color',
                              source = source,
                              line_width = 2,
                              alpha = 0.8,
                              nonselection_color = 'gray',
                              muted_color = 'gray',
                              muted_alpha = 0.2,
                              legend = name))

legend_items = [LegendItem(label = stocks[index], renderers = [renderer], name = stocks[index]) for index, renderer in enumerate(renderers)]
legend = Legend(items = legend_items, name = 'stocks_legend')
p.add_layout(legend)
p.legend.click_policy = 'hide'

greys = len(backup_colors[0]) * ['#888888']
code = '''  selected_line = null;
            for (index in renderers){
                renderer = renderers[index];
                if (renderer.data_source.selected.indices.length > 0)
                {
                    selected_line = renderer.data_source.selected.indices.length
                    break;
                }
            }
            if (selected_line != null){
                for (index in renderers){
                    renderer = renderers[index];
                    if (renderer.data_source.selected.indices.length == 0){     
                        renderer.data_source.data['color'] = greys
                        renderer.data_source.change.emit();
                    }
                }
            }'''
lasso_select_tool = LassoSelectTool(select_every_mousemove = False)
lasso_select_tool.callback = CustomJS(args = dict(renderers = renderers, greys = greys), code = code)
p.add_tools(lasso_select_tool)

p.legend.location = "top_left"
p.legend.click_policy = "mute"

code = '''  for (index in renderers){
                renderer = renderers[index];
                renderer.data_source.data['color'] = colors[index];
                renderer.data_source.change.emit();
            } '''
p.js_on_event('reset', CustomJS(args = dict(renderers = renderers, colors = backup_colors), code = code))

show(p)

Результат:

enter image description here

39
задан Kieran Benton 7 October 2008 в 16:26
поделиться

7 ответов

Убедитесь, что вы передаете правильное чувствительное к регистру значение в RefreshSection, то есть

ConfigurationManager.RefreshSection("appSettings");
48
ответ дан 27 November 2019 в 02:38
поделиться

Это, кажется, дефект (возможно, ошибка) при использовании внешнего файла конфигурации для appSettings. Я попробовал его с помощью атрибута configSource, и RefreshSection просто никогда не работает, я предполагаю, что это - то же при использовании атрибута файла. Если Вы будете двигаться обратно, то Ваш appSettings в Вашем web.config RefreshSection будет работать отлично, но иначе я боюсь, что Вы обречены.

14
ответ дан 27 November 2019 в 02:38
поделиться

Для записи назовите это этим путем:

Тусклая конфигурация Как Система. Конфигурация. Конфигурация = Система. Сеть. Конфигурация. WebConfigurationManager. OpenWebConfiguration (" ~ ")

Возврат AddOrUpdateAppSetting (конфигурация, "YourSettingKey", "YourValueForTheKey")

, Чтобы читать и быть уверенным Вы получаете значения в файле вместо значений в кэше, читают его этот путь:

Dim config As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration("~")
  Return config.AppSettings.Settings("TheKeyYouWantTheValue").Value

Полный пример:

Protected Shared Function AddOrUpdateAppSetting( _
       ByVal Config As System.Configuration.Configuration _
     , ByVal TheKey As String _
     , ByVal TheValue As String _
     ) As Boolean</p>

    Dim retval As Boolean = True

    Dim Itm As System.Configuration.KeyValueConfigurationElement = _
        Config.AppSettings.Settings.Item(TheKey)
    If Itm Is Nothing Then
        If Config.AppSettings.Settings.IsReadOnly Then
        retval = False
        Else
        Config.AppSettings.Settings.Add(TheKey, TheValue)
        End If


    Else
        ' config.AppSettings.Settings(thekey).Value = thevalue
        If Itm.IsReadOnly Then
            retval = False
        Else
            Itm.Value = TheValue
        End If


    End If
    If retval Then
     Try
        Config.Save(ConfigurationSaveMode.Modified)

     Catch ex As Exception
        retval = False
     End Try

    End If

    Return retval

End Function
-1
ответ дан 27 November 2019 в 02:38
поделиться

Приложение. Настройки конфигурации кэшируются в памяти, когда приложение запускается. Поэтому я не думаю, что Вы сможете изменить те настройки, не перезапуская Ваше приложение. Одна альтернатива, которая должна быть довольно прямой, должна была бы создать отдельный, простой конфигурационный XML-файл, и дескриптор загружает/кэширует/перезагружает ее самостоятельно.

-1
ответ дан 27 November 2019 в 02:38
поделиться

Вы пытались сохранить свои AppSettings в отдельном внешнем файле?

Из app.config / web.config:

<appSettings configSource="appSettings.config"></appSettings>

appSettings.config:

<?xml version="1.0"?>
<appSettings>
  <add key="SomeKey" value="SomeValue" />
</appSettings>

Изменения, внесенные в appSettings.config, должны отражаться немедленно. Дополнительная информация: http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation .configsource.aspx

-2
ответ дан 27 November 2019 в 02:38
поделиться

Да. Вы застряли с перезапуском iis.

В asp.net 4.0 и iis 7.5 есть функция, при которой первоначальный запуск удаляется.

0
ответ дан 27 November 2019 в 02:38
поделиться

Я не уверен, возможно ли это в веб-приложении, но это работает в настольном приложении. Попробуйте использовать ConfigurationSettings вместо ConfigurationManager (он будет кричать на вас за использование устаревших классов ...),затем чтение всех данных в класс. Если вы хотите обновить, просто создайте новый экземпляр и отбросьте все ссылки на старый экземпляр. Моя теория того, почему это работает (может быть, ошибочна): если вы не обращаетесь напрямую к файлу app.config все время, когда вы работаете, блокировка файла снимается приложением. Затем можно будет вносить изменения, когда вы не обращаетесь к файлу.

0
ответ дан 27 November 2019 в 02:38
поделиться
Другие вопросы по тегам:

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