Изоляция памяти (множественное создание) статических / глобальных переменных - PullRequest
0 голосов
/ 10 декабря 2018

Я использую сторонний класс с некоторыми статическими членами:

class TheirClass{ //from metadata
    static TheirType TheirProp
}

Я использую экземпляры этого класса в своем коде

class MyWorkLoad  {
    TheirClass theInstance
}

Но мне требуется отдельный контекст / домены / что угодно

{//My Program
    var w1 = MyWorkFactory.Create();
        w1.doWorkBasedOnFreshContext()

    var w2 = MyWorkFactory.Create();    
        w2.doWorkBasedOnFreshContext(); //err, dirty context, shared with w1
 }

Я пытался создать дочерние домены приложений, но все еще получал то же поведение:

protected static AppDomain CreatedChildDomain(AppDomain parentDomain)
{
  Evidence evidence = new Evidence(parentDomain.Evidence);
  AppDomainSetup setup = parentDomain.SetupInformation;
  AppDomain.CreateDomain("Lab_"+generationCount, evidence, setup);
}

Это фабричный метод, который я использую для создания экземпляра

public static MyWorkLoad Create(string LabConfigPath)
{
    AppDomain subdomain = CreatedChildDomain(AppDomain.CurrentDomain);

    ExeConfigurationFileMap fileMap =
        new ExeConfigurationFileMap();

    fileMap.ExeConfigFilename = LabConfigPath;
    var config =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap,
            ConfigurationUserLevel.None);

    var conf = config.AppSettings.Settings;
    var nextWork = new MyWorkLoad(subdomain, conf);
    generationCount++;
    return nextWork;
}

Какмогу ли я достичь желаемого поведения изоляции?

...