gpt4 book ai didi

c# - 使用动态 dll 加载时单例不是唯一的

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:10 25 4
gpt4 key购买 nike

我遇到了单例的麻烦。

此单例从应用程序和通过不同类加载器加载的自定义 dll 调用。

这很像我最终有两个不同的 Singleton 类实例......

我的单例实现是:

protected static SingletonImplementation instance = null;
protected static readonly object padLock = new object();

public static SingletonImplementation Instance
{
get
{
lock (padLock)
{
if (instance == null)
{
instance = new SingletonImplementation();
}

return instance;
}
}
}

private SingletonImplementation()
{}

解决方案A定义了Singleton并使用了它。应用程序 A 创建另一个调用此单例的 DLL,并由应用程序 A 动态加载。

我的应用程序正在扫描一个文件夹以查找可以使用以下代码段加载的所有 dll:

string[] l_asDlls = Directory.GetFiles(l_sDirectory, sAssemblySearchPattern, SearchOption.TopDirectoryOnly);
foreach (string l_sFileName in l_asDlls)
{
Assembly l_assembly = Assembly.LoadFile(Environment.CurrentDirectory + Path.DirectorySeparatorChar + l_sFileName);
Type[] l_aTypes = l_assembly.GetExportedTypes();

foreach (Type l_type in l_aTypes)
{
lstRemoteCommandServer.Add((ClassBase)Activator.CreateInstance(l_type, this, l_sRepositoryDirectory));
}
}

在通过前面的代码片段加载的一个 DLL 中,其中一个调用了我的 Singleton,应用程序 A 拥有的 Singleton 似乎是 DLL 拥有的 Singleton 的不同实例。

我怎样才能改正这个错误/行为?

最佳答案

错误是在加载动态程序集时。要在同一个 AppDomain 中加载,请使用这种方式:

Assembly l_assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(Environment.CurrentDirectory + Path.DirectorySeparatorChar + l_sFileName));

关于c# - 使用动态 dll 加载时单例不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com