c#具有多个DLL的单例模式

时间:2015-08-15 00:54:59

标签: c# .net dll singleton

我的问题是关于在以下星座组件和库中使用的单例模式。

想象一下以下的程序集

  • CommonLibrary.dll
  • MainProcess.exe
  • Plugin1.dll
  • Plugin2.dll

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实例,我需要对资源进行一些进程间锁定。

感谢。

0 个答案:

没有答案