2015-12-17 3 views
1

У меня проблема с обновлением словаря, который является свойством объекта MarshallByRef. Мой упорядоченный объект - это объект конфигурации, который имеет некоторые базовые типы данных и вышеупомянутый словарь. Он создается на одном AppDomain и передается другому Appdomain как интерфейс.Обновление словаря в marshalled объекте

public clas FFIConfiguration : MarshalByRefObject, IUserConfig 
{ 
    public string UserName {get;set;} 
    public DateTime ExecutionTime {get;set;} 
    public Dictionary<String, String> ParametersDict { get; set; } 
} 

Этот объект передается в другой AppDomain, где он используется в качестве интерфейса, как это:

IUserConfig config = parameterPassedAsMarshalled; 
config.ExecutionTime = DateTime.Now; 
config.ParametersDict.Add("Key",Value"); 
config.ParametersDict["Key"] = "Some other value"; 

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

Я могу сериализовать словарь и хранить его как строку, а затем десериализовать его позже, но я бы очень хотел этого избежать. Есть ли другое решение проблемы?

+2

Добавить методы интерфейса для выполнения необходимых операций. – leppie

+0

Спасибо, leppie, который сделал трюк. Я полностью забыл, что эта работа может быть выполнена и в исходном домене. –

+0

Пожалуйста, разместите свое решение в качестве ответа для некоторого rep :) – leppie

ответ

0

Благодаря подсказке от leppie, я сделал работу.

оригинальный класс теперь есть метод, который задает словарь:

public clas FFIConfiguration : MarshalByRefObject, IUserConfig 
{ 
    public string UserName {get;set;} 
    public DateTime ExecutionTime {get;set;} 
    public Dictionary<String, String> ParametersDict { get; set; } 
    public void SetToDictionary(string key, string value) 
    { 
     if (ParametersDict.ContainsKey(key)) 
      ParametersDict[key] = value; 
     else 
      ParametersDict.Add(key, value); 
    } 
} 

Таким образом, словарь устанавливается на оригинальном AppDomain и она работает, как предполагалось.