c # - ICodeCompiler, динамический код и статика - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть система, которая, если можно так выразиться, компилирует и выполняет код c # «на лету». Статические классы используются для хранения данных конфигурации в системе.

Если я получаю доступ к статическому классу из "скомпилированного кода на лету" - все в порядке.

Однако, если я получаю доступ к статическому классу из «скомпилированного кода на лету», то пытаюсь получить доступ к тому же статическому классу за пределами «скомпилированного кода на лету», все данные конфигурации в статическом классе будут потеряны , Почти как будто это было восстановлено.

«Скомпилированный код на лету» запускается в том же домене приложения, если это имеет значение.

Кто-нибудь может объяснить, почему это происходит? (Доступ к статическому файлу из скомпилированного кода сбрасывает его данные конфигурации)

Best

Benny

1 Ответ

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

static в C # - это не то же самое, что static в C-коде.

Я думаю, вам нужен синглтон.

    public sealed class Clazz
    {
        private readonly static Clazz _instance = new Clazz();

        public static Clazz Instance  { get { return _instance; } }

        static Clazz { /* Required for lazy init */ }

        private Clazz()
        {
            // implementation here
        }
    }

Это гарантирует, что в AppDomain всегда будет один экземпляр класса.

Если вы загружаете динамически скомпилированный код в отдельный домен AppDomain и вам нуженcross-appdomain singleton, для этого тоже есть решения (Google - ваш друг).

...