单身实施检查

ale*_*dru 2 c# singleton

您好我有兴趣实现一个返回单个对象的方法.我已经创建了一个基于MSDN上的示例的实现,但我不确定我的实现是否是corect.

代码运行得很好,但我不知道如何检查它是否是相同的对象实例.

这是我的代码:

 public class FileShareAccessFactory : IFileShareAccessFactory
{
    private volatile static IFileShareAccess m_fileShareAccess;
    private static object m_SyncRoot = new object();

    public IFileShareAccess GetFileShareAccessInstance(IContextFactory contextFactory, ILogger logger)
    {
        if (m_fileShareAccess == null)
        {
            lock (m_SyncRoot)
            {
                if (m_fileShareAccess == null)
                {
                    m_fileShareAccess = new FileShareAccess(contextFactory, logger);
                }
            }
        }
        return m_fileShareAccess;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

正如经过双重检查的实施一样,是的 - 这样就行了.它甚至不需要volatile,因为同步的双重检查将处理任何少量的"这是一个错误的null读取".就个人而言,我更关心的是它似乎并不尊重API - 即如果我问一个实例是否指定了特定的上下文工厂和记录器,它实际上给了我一些使用不相关的上下文的东西 - 工厂和记录器.坦率地说,还有IoC/DI容器,您可以将其卸载到.