为什么Singleton实例中没有可访问的方法和属性

时间:2016-02-25 10:19:37

标签: c# .net singleton

使用Asp.net MVC5应用程序。有一个名为 ContainerAdapter 的类。在我的应用程序中,我需要创建此类实例几次次。

所以我决定创建单个实例流程,如: Singleton 。我的语法如下,从单例实例获取访问属性和类ContainerAdapter方法的问题;

适配器类

public class ContainerAdapter
        {
            public int Age { get; set; }
            public string Name { get; set; }
            public int Id { get; set; }

            public void HelloWorld()
            {
                //
            }


            public string GetHelloWorld()
            {
                return "";
                //
            }
        }

Singleton

public class Singleton
    {
        private static Singleton instance = null;
        private Singleton()
        {
            ContainerAdapter apapter = new ContainerAdapter();            

        }
        // Lock synchronization object
        private static object syncLock = new object();

        public static Singleton Instance
        {
            get
            {

                lock (syncLock)
                {
                    if (Singleton.instance == null)
                        Singleton.instance = new Singleton();

                    return Singleton.instance;
                }
            }
        }

    }

从Singleton实例想要访问方法HelloWorld()和GetHelloWorld()

1 个答案:

答案 0 :(得分:1)

你可能想要使用某种IoC容器,而不是手工实现你的单身。

但是如果你真的想亲手实现它,并使用锁进行同步,你最终会得到类似下面代码的东西。你的单例实例是一个ContainerAdapter,所以我把你的两个类合并为一个。您可以编写一些通用的Singleton类,但话又说回来:IoC-containers内置了这种功能。

public class ContainerAdapter
{
    public int Age { get; set; }
        public string Name { get; set; }
        public int Id { get; set; }

        public void HelloWorld()
        {
            //
        }


        private string GetHelloWorld()
        {
            return "";
            //
        }

    private static ContainerAdapter instance = null;

    // Lock synchronization object
    private static object syncLock = new object();

    public static ContainerAdapter Instance
    {
        get
        {

            lock (syncLock)
            {
                if (ContainerAdapter.instance == null)
                    ContainerAdapter.instance = new ContainerAdapter();

                return ContainerAdapter.instance;
            }
        }
    }

}