Какова область применения статического класса?
У меня есть сборка, которая может использоваться более чем одним процессом одновременно. Если я использую статический класс, все ли процессы будут использовать один и тот же "экземпляр" этого класса?
Поскольку процессы разделены, будут ли они работать в разных доменах приложений, поэтому статические "экземпляры" будут разделены?
Пудинг в деталях здесь заключается в том, что сборка используется пользовательским адаптером BizTalk, который можно настроить для обработки сообщений в параллельных пакетах. Это то, что я называю "несколько процессов" выше.
5 ответов
Несколько потоков будут совместно использовать экземпляр. По этой причине статический класс может быть удобен для передачи состояния между потоками, но вы должны быть очень осторожны, чтобы не вводить условия гонки (Monitor
или же lock
ваши свойства).
Тем не менее, несколько процессов должны быть в отдельных доменах приложений и, следовательно, каждый из них имеет свой собственный экземпляр.
Статические классы существуют один раз для каждой области приложения. В вашем случае это будет зависеть от того, использует ли адаптер несколько потоков в одном и том же домене приложения (таким образом совместно используют один экземпляр статического класса) или использует несколько процессов (таким образом, имеющих отдельные экземпляры статического класса).
"У меня есть сборка, которая может использоваться более чем одним процессом одновременно. Если я использую статический класс, все ли процессы будут использовать один и тот же" экземпляр "этого класса?"
Нет, все они имеют отдельные экземпляры.
"Поскольку процессы разделены, будут ли они работать в разных доменах приложений, следовательно, статические" экземпляры "будут разделены?"
Да.
Область действия статического класса ограничена областью приложения. Каждый домен приложения будет иметь свою собственную копию любых статических переменных, которые могут у вас быть. Если ваши "процессы" являются потоками в одном домене приложения, они будут использовать статические значения. Но если они представляют собой отдельные процессы Windows, то они будут иметь разные домены приложений и, следовательно, отдельные копии.
Вы можете посмотреть на шаблон Singleton. Суть в том, что вы хотите контролировать количество экземпляров службы.
Я предполагаю, что вы хотите отдельный dll/ проект, обслуживающий все клиентские запросы. Вы можете использовать статический класс /singleton/multiton для реализации желаемой функциональности. Это действительно зависит от того, чего вы пытаетесь достичь.