Spring.NET как установить значение словарной статьи с помощью SpEL

У меня возникла проблема с установкой значения словарной статьи с использованием языка выражений Spring.NET в конфигурации XML. У меня есть класс PreferencesManager, у которого есть свойство Dictionary<string, string>, которое я хочу настроить через XML. Одна из записей в словаре - это строка, представляющая базовый каталог текущего домена. Мой класс PreferencesManager предоставляет это общедоступное свойство:

(Обратите внимание, я использую частный сеттер, потому что Spring.NET поддерживает инъекцию частного сеттера, и я хочу сохранить частную доступность)

public static Dictionary<string, string> DefaultPreferences
{
    get { return p_DefaultPreferences; }

    private set
    {
        p_DefaultPreferences = value;
    }
}

Моя конфигурация XML для этого класса выглядит так:

<object id="PreferencesManager" type="TestProj.PreferencesManager, TestProj">
    <property name="DefaultPreferences">
        <dictionary key-type="string" value-type="string">
            <entry key="DefaultWordListLocation" 
                   expression="AppDomain.CurrentDomain.BaseDirectory" />
        </dictionary>
    </property>
</object>

Моя проблема в том, что когда контейнер инициализирует этот объект, он выдает исключение ConfigurationErrorsException: Error creating context 'spring.root': Cannot initialize property or field node 'AppDomain' because the specified context is null.

Я прочитал документацию по языку выражений Spring.NET по адресу http://www.springframework.net/doc-latest/reference/html/expressions.html (которого, к сожалению, не хватает в примерах SpEL в конфигурации XML), но я думаю, что мне что-то не хватает. MSDN сообщает мне, что класс AppDomain находится в сборке mscorlib.dll, поэтому мне не нужно регистрировать тип в Spring.NET TypeRegistry.

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

Я что-то здесь не замечаю? Заранее спасибо!


person Lee Fowler    schedule 13.07.2014    source источник


Ответы (1)


Попробуйте изменить свое выражение SpEL, например:

<object id="PreferencesManager" type="TestProj.PreferencesManager, TestProj">
  <property name="DefaultPreferences">
    <dictionary key-type="string" value-type="string">
        <entry key="DefaultWordListLocation" 
               expression="T(System.AppDomain).CurrentDomain.BaseDirectory" />
    </dictionary>
  </property>
</object>
person Kirill Muratov    schedule 22.07.2014