Einzelnen Beitrag anzeigen

Waldteufel
(Gast)

n/a Beiträge
 
#1

[gelöst] Liste "by Reference" zwischen AppDomains

  Alt 17. Mär 2006, 19:04
Hi Community.

Dieses Problem macht mich schon seit Tagen verrückt. In meinem Programm verwende ich mehrere AppDomains. Nun möchte ich in der einen AppDomain ein Objekt (genauer gesagt: eine Liste) aus einer anderen AppDomain verändern.

Beispiel:
Code:
using System;
using System.Collections.Generic;
using System.Reflection;

namespace Beispiel {
  class dasObjekt : MarshalByRefObject {
    public Dictionary<string, object> config;

    public dasObjekt() { config = new Dictionary<string, object>(); }
    public void huhu() {
      AppDomain myDomain = AppDomain.CreateDomain("myDomain");
      myType myObject = (myType) myDomain.CreateInstanceAndUnwrap(
                          Assembly.GetAssembly(typeof(myType)).FullName,
                          typeof(myType).FullName
                        );

      myObject.dingsda(this);
    }
 
    public static void Main() {
      dasObjekt x = new dasObjekt();
      x.config["x"] = "y";
      x.huhu();

      foreach (KeyValuePair<string, object> y in x.config)
        Console.WriteLine("config[\"{0}\"] = \"{1}\"", y.Key, y.Value);
      Console.ReadLine();
    }
  }

  class myType : MarshalByRefObject {
    public myType() {
    }
 
    public void dingsda(dasObjekt x) {
      x.config["a"] = "b";
    }
  }
}
Dummerweise kommt diese Änderung (config["a"] = "b") aber nie bei dasObjekt an.
Das Programm gibt nur
Code:
config["x"] = "y"
anstatt von
Code:
config["x"] = "y"
config["a"] = "b"
aus.

Weiß jemand, wie man dieses Problem beseitigen könnte?

[edit 2006-03-18 14:18] Formulierung etwas geradegebogen...
  Mit Zitat antworten Zitat