我们有一项服务可以运行多个(并且根据安装的部件而变化)组装模块。每个模块都在其自己的 AppDomain 中运行,因为我们可以运行同一程序集的多个实例,连接到不同的数据库。
最近我添加了一个新模块,以替换现有的单独服务。该模块是多线程的,并且还使用我们内部的遗留日志库,它也是多线程的。新模块是现有非托管 c++ 代码的 ac# 包装器。
我的问题是日志代码将数据存储在 AppDomain 中,包括要写入的文件名和位置等。这在模块的主线程上工作正常,但是当创建新线程时,它们是在父 AppDomain 下创建的,即服务可执行文件本身。父 AppDomain 不包含日志记录代码正在寻找的数据,因此它无法写出其数据。
我发现一篇关于此的文章指出,使用旧的 Win32 CreateThread() 调用创建的线程不会在当前 AppDomain 中创建,我应该使用 .Net 线程。我的代码就是这种情况,所以我将模块代码更改为使用 .Net 线程,但我仍然得到相同的结果。
我还尝试让日志记录类作为单例运行,但生成的线程仍然尝试从父 AppDomain 中拉出单例,这当然没有正确的数据。
我真的需要让这个工作,我已经碰壁了。
有任何想法吗???