[英]c# Singleton Pattern with multiple DLLs
我的问题是关于在以下星座组件和库中使用的单例模式。
想象一下以下的组件
MainProcess.exe,Plugin1.dll和Plugin2.dll使用CommonLibrary.dll中的类Manager
。 CommonLibrary.dll在编译时链接到其他程序集。 Manager
类使用单例模式:
public class Manager
{
private static Manager instance;
public static Manager Instance
{
[MethodImpl(MethodImplOptions.Synchronized)]
get {
if (instance == null)
{
instance = new Manager();
}
return instance;
}
}
private Manager()
{
}
// methods ...
}
单例模式用于仅创建Manager
类的一个实例(显然)。 这在Manager
的方法中很重要,因为对资源的访问需要与不同的锁协调。 例如,使用锁:
// Method inside Manager
public void DoSomething()
{
lock(someLockObject)
{
// do something
}
}
MainProcess.exe,Plugin1.dll和Plugin2.dll都通过调用在代码中的某个地方引用了Manager
Manager manager = Manager.Instance;
// do something with manager
现在假设以下场景:MainProcess.exe使用Assembly.LoadFrom()在运行时使用反射加载Plugin1.dll和Plugin2.dll;
问题:MainProcess.exe,Plugin1.dll和Plugin2.dll是否共享相同的Manager实例? 这很重要,因为如果他们不共享相同的Manager实例,我需要进行一些进程间的资源锁定。
谢谢。
MainProcess.exe,Plugin1.dll和Plugin2.dll共享相同的Manager实例吗?
是的,他们这样做。 应用程序域中只有一个Manager
实例(在整个过程中,除非您明确创建另一个AppDomain
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.