【问题标题】:singleton implementation problem in C#C#中的单例实现问题
【发布时间】:2011-04-11 16:08:13
【问题描述】:

--ConsoleApplication 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    public class MsgService
    {
        private static CreateConnectionToA _instanceA;
        private static CreateConnectionToB _instanceB;

        protected MsgService()
        {

        }

        public static MsgService GetInstanceA(string paramA, string paramB)
        {

            if (_instanceA != null)
            {
                return _instanceA;
            }

            return _instanceA = new CreateConnectionToA("p1","p2");
        }


        public static MsgService GetInstanceB(string paramA, string paramB)
        {

            if (_instanceB != null)
            {
                return _instanceB;
            }

            return _instanceB = new CreateConnectionToB("p1", "p2");
        }


    }




}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class CreateConnectionToB : MsgService
    {
        public CreateConnectionToB(string param1, string Param2)
        {

        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class CreateConnectionToA : MsgService
    {
        public CreateConnectionToA(string param1, string Param2)
        {

        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            MsgService.GetInstanceA("p1", "p2");

            Console.Read();
        }
    }
}

--ConsoleApplication 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Press");
            Console.Read();

            ConsoleApplication2.MsgService.GetInstanceA("p1", "p2");
            Console.Read();
        }
    }
}

我正在尝试进行 simgleton 实现,但我的方法有问题。它总是从每个控制台应用程序创建 _instanceA 和 _instanceB 的新实例。

有人可以指出这里需要做什么吗?

【问题讨论】:

    标签: c# .net singleton interprocess


    【解决方案1】:

    您需要命名互斥体来实现进程间同步。

    【讨论】:

    • 直截了当,是的。如果我们不受实现选择的限制,而只是尝试实现一个表现为单例的远程服务,我强烈建议查看 WCF(它有能力这样做)。
    • yoda.arachsys.com/csharp/singleton.html Jon Skeet 的单例是在它存在于一个进程中的前提下编写的。不过还是不错的。
    • 请提供命名互斥锁的示例?
    • @Asdfg:您能否准确描述您正在尝试做的事情,而不使用单例和文字服务这个词?
    • 我正在尝试创建 _instanceA 和 _instanceB 的一个实例,无论调用如何。在 ConsoleApplication1 中,它工作正常,但在 ConsoleApplication2 中,空检查失败并创建新实例。我希望 _instanceA 和 _instanceB 在内存中。
    【解决方案2】:

    在两个应用程序之间共享一个对象实例有点困难,因为默认情况下它们在不同的应用程序域中运行。要完成我认为您正在尝试做的事情,您需要要么

    • 跨应用程序域边界封送,或
    • 在共享的应用程序域中运行这两个进程。编写第三个进程——shell——负责在共享的应用程序域中生成/托管其他两个进程。

    http://www.codeproject.com/KB/dotnet/AppDomainMemImprovement.aspx

    Sharing data between AppDomains

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多