Ссылка на синглтон - PullRequest
       14

Ссылка на синглтон

1 голос
/ 18 января 2010

Хорошо ... У меня есть ситуация, когда C # .dll является синглтоном. Теперь я хочу иметь возможность создавать экземпляр singletonInstance, чтобы иметь возможность предоставлять ссылку на любые другие приложения, которые могут запускаться. Итак, я посмотрел NamedPipes, и это сработало бы - за исключением одного, он должен быть кроссплатформенным или независимым от платформы. У меня есть решение, но я с трудом пытаюсь выяснить, могу ли я получить ссылку на singletonInstance либо через дескриптор, либо каким-либо другим методом?

Теперь, когда появилось несколько комментариев и вопросов, я могу объяснить немного больше и уточнить: у меня есть в основном общий ресурс (мой singletonInstance.dll). Скажем, appA нужен этот singletonInstance, если он еще не создан, он будет создан. Затем запускается appB, и ему нужна ссылка на singletonInstance. Это сценарий.

Ответы [ 4 ]

2 голосов
/ 18 января 2010

Если я правильно читаю, вы должны управлять экземпляром на сервере, а другие приложения должны общаться с сервером, а не с самим объектом. Веб-сервисы - это первое, что приходит на ум, но я не знаю достаточно о вашей проблеме.

0 голосов
/ 22 января 2010

Похоже, вам лучше реализовывать то, что нужно использовать в качестве службы.

Вы можете подключиться к услуге различными способами, которые вы выбрали для предоставления / реализации / разрешения. Веб-сервисы, WCF, именованные каналы или необработанные сокеты и т. Д. Выберите то, что подходит вам лучше всего.

Затем сама служба может соответствующим образом управлять своим внутренним состоянием (одноэлементные анти-шаблоны или иным образом, это не имеет значения).

Подумайте, как устроен Sql Server. Он не разделяет один и тот же экземпляр dll между процессами и границами памяти, а также не использует тяжелые клиенты.

0 голосов
/ 22 января 2010

Я предложу ответ - Runtime.Remoting.Channels.У меня был общий объект данных («singletonInstance») наследовать MarshaByRefObjectЭто дает нам именно то, что мы хотим, плюс мы делаем его способным к некоторым сетевым функциям.Прямо сейчас это действительно действует как услуга.TcpChannel 'Server' на самом деле является частью DLL, где находится общий объект данных.Это в основном только для тестирования, экспериментальной реализации и т. Д.

0 голосов
/ 19 января 2010

Ну, вы можете общаться через именованные каналы, и когда они недоступны, вы можете переходить к сокетам, но это зависит от того, что на самом деле будет делать ваш "синглтон". Это какой-то общий кеш? Или что?

Будут ли отдельные приложения и «синглтон» работать на одной машине или в сети? Подход Anyways Socket хорош, если вы хотите контролировать низкоуровневую реализацию или можете перейти на веб-сервисы с некоторыми накладными расходами или использовать удаленное взаимодействие.

...