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