我的问题是关于在以下星座组件和库中使用的单例模式.
想象一下以下的组件
MainProcess.exe,Plugin1.dll和Plugin2.dll使用ManagerCommonLibrary.dll中的类.CommonLibrary.dll在编译时链接到其他程序集.本Manager类使用Singleton模式:
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 ...
}
Run Code Online (Sandbox Code Playgroud)
单例模式用于仅创建Manager类的一个实例(显然).这在方法中很重要,Manager因为需要使用不同的锁来协调对资源的访问.例如,使用锁:
// Method inside Manager
public void DoSomething()
{
lock(someLockObject)
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
MainProcess.exe,Plugin1.dll和Plugin2.dll都通过调用在代码中的某个地方引用了Manager
Manager manager = Manager.Instance;
// do something with manager
Run Code Online (Sandbox Code Playgroud)
现在假设以下场景:MainProcess.exe使用Assembly.LoadFrom()在运行时使用反射加载Plugin1.dll和Plugin2.dll; …