powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обеспечить порядок выполнения двух статических конструкторов
25 сообщений из 46, страница 1 из 2
Как обеспечить порядок выполнения двух статических конструкторов
    #38142065
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простой пример.

Нужно чтобы один статический конструктор назначил значение некоторой глобальной переменной, а второй его считал.

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

Эни айдиа ?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142069
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть конечно вариант с объявлением статической переменной в первом классе, но что если классы не знаю друг о друге на прямую, а передаются через интерфейс.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142085
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архитектура с глобальными переменными вызывает сомнения, если честно
но все-таки, по сабжу, просто в коде обратитесь сначала к классу с первым конструктором
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142087
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шо за статический конструктор?
Перменная пусть object и равна null и проверяй на null, а вообще шо за бред?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142116
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тут статика?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142126
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давно читал статью про чудеса со статиками. Много подводных камней насчет времени инициализации, так что я бы предпочел делать это вручную тем же статичным методом.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142129
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DI контейнер без всяких статиков обеспечит нужный порядок инициализации
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142133
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,

приведите пример того чего хотите
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142141
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,
Это как, два статических конструктора у типа?
Инициализировать поля из статического конструктора - грех..
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142157
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79архитектура с глобальными переменными вызывает сомнения, если честно
но все-таки, по сабжу, просто в коде обратитесь сначала к классу с первым конструктором

А как я могу гарантировать, что я первый обращусь. Может там еще какая сборка подгрузится первой и она обратится ко второму конструктору (который уже должен считать).




fortibransaШо за статический конструктор?
Перменная пусть object и равна null и проверяй на null, а вообще шо за бред?
Ну и ? проверит он, что переменная равна NULL. И потом выйдет.
Проблема то в том. что статический конструктор выполняется только один раз. И больше мы туда уже не зайдем.
или что - нам обращатся к классу в отдельном потоке и там вешатся в бесконечный цикл ожидания ?




МСУА зачем тут статика?

Мне нужно чтобы Первый класс был проинициализирован До первого его использования - статической информацией. Но информацию об инициализационных данных имеет второй класс.

Первый класс без инициализации бесмысленнен.
Как быть ?

Писать в клиентском коде "Класс_1 вы проинициализировались ? Нет ? ну ладно я через 5 секунд зайду" что ли ?.
Мне нужно чтобы к моменту работы с Классом_1 клиенстким кодом он был уже проинициализирован.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142160
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиИзюбр,
Это как, два статических конструктора у типа?
Инициализировать поля из статического конструктора - грех..

Два типа. Разные.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142173
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,

подробнее про задачу. Вы на плохую дорогу становитесь :) Может действительно DI вам нужен?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142174
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,

используй ленивую инициализацию и моск не выноси
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142185
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netivanИзюбр,

подробнее про задачу. Вы на плохую дорогу становитесь :) Может действительно DI вам нужен?

DI это что-то слишком сложное. Вот так вот вбухивать в проект.

Ну задачу я описал. Нужно загнать в Класс_1 глобальную информацию, имеющую смысл для всех его членов. Т.е. статическую.
Без этой информации он абсолютно не работоспособен (как он подключистя к БД без строки подключения ?)

Соответственно что имеем:
1. глобальную информацию (статика нужна я так понимаю)
2. не работоспособность до инициализации.


В принципе тут есть что-то от ленивой инициализации. Но код не многопоточен. По идее до обращения клиентского кода статическая информация уже в ПРИНЦИПЕ должна быть. В общем нет... похоже lazy тут не подходит.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142189
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,
если бы еще знать что такое.... ))
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142196
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,

погодите. Если у вас инициализация в Классе1 полей в конструкторе, то вам пофиг. Когда класс2 статический обратиться к Классу1(стат поля),то они будут инициализированы, а когда об этом подумает CLR.Что-то упустил?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142197
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиpation,
если бы еще знать что такое.... ))

знаю
Manning Dependency Injection in NET
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142208
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netivanИзюбр,

погодите. Если у вас инициализация в Классе1 полей в конструкторе, то вам пофиг. Когда класс2 статический обратиться к Классу1(стат поля),то они будут инициализированы, а когда об этом подумает CLR.Что-то упустил?


хм..
В общем извините меня . Я забыл добавить еще главное требование

Оно такое: Класс_1, если его не проинициализирует никто, он должен "самопоинициализироватся".

Поэтому то мне и надо, чтобы Класс_2 выполнялся раньше Класса_1. Чтобы он проинициализировал Класс_1, иначе, если Класс_1 выполнится раньше, то он посчитает, что его не инициализировали, и начнет "самоинициализацию"


Извините меня. Я дейтсивтельно это упустил.
Просто вот сижу ломаю голову над интереснейшей задачей с Хабра:
http://habrahabr.ru/post/168591/
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142211
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрГде-то в степиpation,
если бы еще знать что такое.... ))

знаю
Manning Dependency Injection in NET

это аля патерн синглтон через вспомогательный тип и его статический конструктор, разруливает многоточечное обращение
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142231
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзюбрПросто вот сижу ломаю голову над интереснейшей задачей с Хабра:
http://habrahabr.ru/post/168591/

ЗЫ. Если что, то тут решение
http://i.imgur.com/WgTJmQa.png?1

не лезте если не хотите решить все сами.
И еще подсказка - в отчетах НЕ слова, а просто случайные наборы букв (соответствующие регуляркам) в стиле "ffffsdffffwww". Так, что не пытайтесь угадать английские слова.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142234
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изюбрне лезте если не хотите решить все сами.
И еще подсказка - в отчетах НЕ слова, а просто случайные наборы букв (соответствующие регуляркам) в стиле "ffffsdffffwww". Так, что не пытайтесь угадать английские слова.

госпади, сколько ошибок в паре предложений Вот, что слепая печать животворящщая делает при спешке :)
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142397
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Повторю вопрос. Подытожив.

1. Класс_1 .
Работает на основе Строки_Соединения .
Сохраняется для всех экземлпяров, т.е. в статической части (я так предпологаю), общую иформацию (предположим строку соединения ).

2. Класс_2 .
Должен проинициализировать Класс_1 .
Он должен обязательно отработатся ДО Класса_1 и проинициализировать его Строкой соединения

3. Иначе . Если Класс_1 выполнится до его инициализации Классом_2. То он видит, что его никто не инициализировал. И идет по другому алгоритму (например: при первой попытке обратится к нему из клиентского кода выдать сообщения "Ошибка. Не было инициализации")

4. К моменту вызова методов Класса_1 из клиентского кода, он должен быть готов к работе (или быть готовым сообщить о возникшей проблеме. Например об отсутствии связи с сервером, по строке которой ему передали при инициализации. И тут поймите идет речь о проблеме возникшей уже после/в_процессе инициализации, а не то, что "ой... а я еще не проинициализирован.. а вы меня вызвали... и мне нечего вам сказать")

Задача.
Мне нужно прогарантировать, что Класс_2 выполнится до Класса_1, и передаст ему строку соединения . Чтобы в принципе не возникло случайности, что Класс_1 выполнился до Класса_2.
Иначе просто будет какой-то рендом, когда приложение то работает, то не работает, в зависимости от того, какой класс был загружен первым.

PS. Класс_1 ничего не знает непосредственно о Классе_2. Он лишь должен быть кем-то проинициализирован.
Однако можно ввести зависимость от еще какого-то класса - если у Вас есть идеи как это реализовать, то хотелось бы выслушать (рассмотреть, потрогать, обмозговать) !

PPS. Но хотелось бы без прикручивания технологий-мастодонтов.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142465
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,
ленивая инициализация или паттерн сингтон о чем говорил pation
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class Класс1 
    {
       public static Lazy<string> ConString = new Lazy<string>(Класс2.InizializyConnectString);
         
    }
    class Класс2 
    {
        public static string InizializyConnectString()
        {
            return "sdadasdasdasd";
        }

    }
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142827
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр,

слушай а если по старинке - вручную сначала инициализируешь класс1, потом все остальное. В чем проблема? Не делай это в конструкторе и все))
Main()
{
Class2.InitClass1();
}
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38142902
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрМСУА зачем тут статика?
Мне нужно чтобы Первый класс был проинициализирован До первого его использования - статической информацией. Но информацию об инициализационных данных имеет второй класс.
Всё-равно я не понимаю.
1. Что-то "статическая информация"?
2. Что мешает инициализировать класс через конструктор, а не через прямую кишку?
3. При уходе от статики (статический класс, статический конструктор) ты имеешь возможность прикрутить интерфейсы (зависимости).
4. Профит?
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обеспечить порядок выполнения двух статических конструкторов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]