проблема реализации синглтона в C # - PullRequest
0 голосов
/ 11 апреля 2011

- 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();
        }
    }
}

Я пытаюсь реализовать симглтон, но что-то не так с моим подходом. Он всегда создает новые экземпляры _instanceA и _instanceB из каждого консольного приложения.

Может кто-нибудь указать мне, что здесь нужно сделать?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011

Для межпроцессной синхронизации вам понадобятся именованные мьютексы.

0 голосов
/ 11 апреля 2011

Совместное использование экземпляра объекта между двумя приложениями довольно сложно, так как по умолчанию они запускаются в отдельных доменах приложений. Чтобы выполнить то, что, я думаю, вы пытаетесь сделать, вам нужно либо

  • маршал через границы доменов приложений, или
  • запустить два процесса в общем домене приложения. Напишите третий процесс & mdash; оболочка & ndash; отвечает за порождение / хостинг двух других процессов в общем домене приложений.

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

Обмен данными между доменами приложений

...