小编Ch3*_*k3r的帖子

c#具有多个DLL的Singleton模式

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

想象一下以下的组件

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

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; …

.net c# dll singleton

6
推荐指数
1
解决办法
1394
查看次数

标签 统计

.net ×1

c# ×1

dll ×1

singleton ×1