相关疑难解决方法(0)

AppDomain中的静态字段

我正在尝试使用AppDomain管理一些遗留代码的想法,其中包含许多静态字段在多线程环境中.

我读到了这个问题的答案:如何使用AppDomain限制静态类的范围以便线程安全使用?,认为它非常有前景,并决定在程序集ClassLibrary1.dll中使用一个非常简单的类来尝试它:

namespace ClassLibrary1
{
    public static class Class1
    {
        private static int Value = 0;

        public static void IncrementAndPrint()
        {
            Console.WriteLine(Value++);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码,它将程序集加载到2个不同的应用程序域并多次调用IncrementAndPrint():

var appDomain1 = System.AppDomain.CreateDomain("AppDomain1");
var appDomain2 = System.AppDomain.CreateDomain("AppDomain2");

var assemblyInAppDomain1 = appDomain1.Load("ClassLibrary1");
var assemblyInAppDomain2 = appDomain2.Load("ClassLibrary1");

var class1InAppDomain1 = assemblyInAppDomain1.GetType("ClassLibrary1.Class1");
var class1InAppDomain2 = assemblyInAppDomain2.GetType("ClassLibrary1.Class1");

class1InAppDomain1.InvokeMember("IncrementAndPrint", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, null);
class1InAppDomain1.InvokeMember("IncrementAndPrint", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, null);
class1InAppDomain1.InvokeMember("IncrementAndPrint", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, null);

class1InAppDomain2.InvokeMember("IncrementAndPrint", …
Run Code Online (Sandbox Code Playgroud)

.net c# appdomain

30
推荐指数
1
解决办法
1万
查看次数

AppDomain之间共享静态类吗?

我有四个程序集,ModuleStatic,Loader以及ModuleA和ModuleB,除了可执行程序Loader之外,它们都是DLL。

在DLL ModuleStatic中:

public class ModuleStatic {
    public static string Foo { get; set; } = "Foo";    
}
Run Code Online (Sandbox Code Playgroud)

在Loader中,将通过Assembly.Load和AppDomain将ModuleA和ModuleB分别加载到domA和domB。如果ModuleA修改了ModuleStatic.Foo变量,则domB中的ModuleB会收到修改吗?

c# reflection appdomain

2
推荐指数
1
解决办法
984
查看次数

标签 统计

appdomain ×2

c# ×2

.net ×1

reflection ×1