2010-10-11 2 views
5

Мне интересно: если я создам одноэлементный класс с частным конструктором и одним статическим методом, который вернет экземпляр этого класса, и я поставлю его на сборку, что произойдет, если я получу этот экземпляр из двух разных приложений?Является ли singleton доступным через различные приложения?

Выполняет ли приложения всегда по одному и тому же экземпляру синглтона?

И если оба этих приложения выгружаются из памяти, экземпляр также будет освобожден?

Спасибо.

ответ

8

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

Фактически - даже приложение, выполняющееся дважды, не будет делиться фактическим экземпляром Singleton между ними.

+1

Еще более конкретно, статические экземпляры не являются общим через границу AppDomain, так что вы даже можете иметь 2 одиночек в одном экземпляре запущенного приложения. – codekaizen

2

Я так не думаю, не делая ничего, у вас будет один синглтон на каждое прикладное пространство.

1

Не, если вы специально не делаете его общим одноэлементным путем, сохраняя/загружая его в одно и то же физическое местоположение на диске или в базе данных.

2

Класс Singleton будет основан на основе приложения, так что, если у вас есть несколько приложений, которые загружают ваш одноэлементный класс, более одного экземпляра можно найти в вашем одиночном классе.

Cross процесс Singleton не имеет никакого значения, вы будете иметь различные экземпляры