powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обеспечить порядок выполнения двух статических конструкторов
46 сообщений из 46, показаны все 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
Как обеспечить порядок выполнения двух статических конструкторов
    #38143150
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУВсё-равно я не понимаю.
1. Что-то "статическая информация"?
2. Что мешает инициализировать класс через конструктор, а не через прямую кишку?
3. При уходе от статики (статический класс, статический конструктор) ты имеешь возможность прикрутить интерфейсы (зависимости).
4. Профит?

1. Ну банально - это информация нужная Классу_1 для работы. Предположим это КонекшнСтринг. Если ему его не дадут, то как он Сессию откроет ?

2. Хм. А как я могу проинициализировать через конструктор, и обеспечить, что я это сделаю до обращений от клиентского кода ? Я вижу единственный вариант: статический конструктор. Он выполнится гарантированно до любых обращений пользовательского кода (пользовательскому коду будет не доступен статический конструктор).


3. Да все клево. Но как бы сделать так, чтобы я успел проинициализировать класс до обращений из польщовательского кода ?

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

Я подумал.
Действительно, самое лучшее будет, пожалуй, через ленивое обращение к статическому инициализируемому свойству. Все отлично укладывается.

Класс_2 статически инициализирует Класс_1.

При вызове методов Класса_2 из клиентского кода, идет проверка по типу Синглтона, мол если инстанс инициализирован (то бишь, если нужные для работы данные были заданы), то все ОК. Если же не инициализирован, то значит статическую переменную не инициализировали - и, как мне и нужно, идем по второму алгоритму.

Надо будет еще позаботится о правах доступа, но это у меня уже есть.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38143236
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр1. Ну банально - это информация нужная Классу_1 для работы. Предположим это КонекшнСтринг. Если ему его не дадут, то как он Сессию откроет ?
Если классу что-то нужно для работы, используют конструктор этого класса.

Изюбр2. Хм. А как я могу проинициализировать через конструктор, и обеспечить, что я это сделаю до обращений от клиентского кода ? Я вижу единственный вариант: статический конструктор. Он выполнится гарантированно до любых обращений пользовательского кода (пользовательскому коду будет не доступен статический конструктор).
Какая-то каша... Проинициализировать через конструктор что ты не сможешь? Причем тут статический конструктор я так и не понял. Обычный констрктор что, не гарантированно выполнится что-ли?

Изюбр3. Да все клево. Но как бы сделать так, чтобы я успел проинициализировать класс до обращений из польщовательского кода ?
Инициализируйся при первом обращении. Или при старте программы. Или еще как. Какое это имеет отношение к архитектуре самих классов с конструкторами, непонятно.

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

Инициализирует не клиентский код. А другая библиотека. Причем клиентский код об этой внешней библиотеке не знает.

Причем и сам Класс_1 не знает о Классе_2.
У Класса_1 есть переменная, которую кто-то должен проинициализировать извне. Класс_1 вообще не знает кто там вызовет его конструктор и передаст ему КонекшнСтринг.
Т.е. о Классе_2 он вообще в принципе ничего не знает, Класс_1 это просто класс из библиотеки. Откуда ему знать имя конкретного класса, который даст ему Строку в конструктор.

Опять же. Клиентский код тоже не знает о Классе_2. Потому, что я хочу Клиентский Код отделить от всей кучи технических деталей, которые тянет с собой Класс_2 и Класс_1 (внутри себя). Слишком уж это завяжет Клиентский Код на сущности, которые ему не нужны в работе.

Я хочу отцепить Клиентский Код от всех этих не нужных ему сущностей. И поэтому хочу, чтобы Клиентский Код получил уже работоспособный (инициализированный) Класс_1. Который для него кто-то должен проинициализировать.

Соответственно мне нужно придумать, как обеспечить, чтобы Клиентский Код получил уже проинициализированный Класс_1.
Проинициализировать его может Класс_2. Который знает где добыть конфигурационные параметры. Классу_1 это безразлично. Ему лишь нужна Строка.
Да я в прицнипе там планирую позаботится о правах доступа, чтобы никто, кроме Класса_2 не смог влезть - но это в принципе я уже придумал как сделать.

Ну и итог.
Мне нужно обеспечить, чтобы Класс_1 был проинициализирован Строкой, до любого обращения к нему от Клиентского Кода. В целом я вижу единственную возможность - это инициализация Класса_1 в его статическом конструкторе (который будет доступен только избранным - т.е. Классу_2).

И (большое спасибо pation за наводку) я думаю, идея с ленивым доступом к методам Класса_1 прекрасное решение.
Т.е. Класс_2 статически проинициализирует Класс_1.
Клиентский Код не будет иметь доступ к Статическому конструктору, а значит будет работать с Классом_1 уже после того, как тот должен быть проинициализирован.

Соответственно Клиентский Код вызовет любой метод, который, в свою очередь, будет обращаться к внутреннему свойству через get. Там я делаю проверку, что нужные данные проинициализированы, и в ином случае выдам ошибку.

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

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

Ох печаль...

Тогда похоже придется думать о DI :(
Чтобы Клиентский Код запрашивал Класс_1 у некоторой точки доступа, а точка доступа возвращала Класс_1, проинициализированный Классом_2 (надо будет еще обучить эту точку тому, что Класс_2 умеет инициализировать Класс_1)
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38143485
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрМСУ,

Инициализирует не клиентский код. А другая библиотека. Причем клиентский код об этой внешней библиотеке не знает.

Причем и сам Класс_1 не знает о Классе_2.
У Класса_1 есть переменная, которую кто-то должен проинициализировать извне. Класс_1 вообще не знает кто там вызовет его конструктор и передаст ему КонекшнСтринг.
Т.е. о Классе_2 он вообще в принципе ничего не знает, Класс_1 это просто класс из библиотеки. Откуда ему знать имя конкретного класса, который даст ему Строку в конструктор.

Опять же. Клиентский код тоже не знает о Классе_2. Потому, что я хочу Клиентский Код отделить от всей кучи технических деталей, которые тянет с собой Класс_2 и Класс_1 (внутри себя). Слишком уж это завяжет Клиентский Код на сущности, которые ему не нужны в работе.

Я хочу отцепить Клиентский Код от всех этих не нужных ему сущностей. И поэтому хочу, чтобы Клиентский Код получил уже работоспособный (инициализированный) Класс_1. Который для него кто-то должен проинициализировать.

Соответственно мне нужно придумать, как обеспечить, чтобы Клиентский Код получил уже проинициализированный Класс_1.
Проинициализировать его может Класс_2. Который знает где добыть конфигурационные параметры. Классу_1 это безразлично. Ему лишь нужна Строка.
Да я в прицнипе там планирую позаботится о правах доступа, чтобы никто, кроме Класса_2 не смог влезть - но это в принципе я уже придумал как сделать.

Ну и итог.
Мне нужно обеспечить, чтобы Класс_1 был проинициализирован Строкой, до любого обращения к нему от Клиентского Кода. В целом я вижу единственную возможность - это инициализация Класса_1 в его статическом конструкторе (который будет доступен только избранным - т.е. Классу_2).

И (большое спасибо pation за наводку) я думаю, идея с ленивым доступом к методам Класса_1 прекрасное решение.
Т.е. Класс_2 статически проинициализирует Класс_1.
Клиентский Код не будет иметь доступ к Статическому конструктору, а значит будет работать с Классом_1 уже после того, как тот должен быть проинициализирован.

Соответственно Клиентский Код вызовет любой метод, который, в свою очередь, будет обращаться к внутреннему свойству через get. Там я делаю проверку, что нужные данные проинициализированы, и в ином случае выдам ошибку.

как то так.Какая-то странная архитектура. Клиентский код не знает ни про библиотеку, ни про Класс_2. А кто о них знает, кто в итоге обратится к библиотеке, или к Классу_2? Класс_1? Тогда из-за чего весь сыр-бор?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38143488
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр, реализуйте фабрику, что будет создавать для клиентского кода экземпляр Класса_1 и внутри себя знать о чём ей надо.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38143495
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИзюбр, реализуйте фабрику, что будет создавать для клиентского кода экземпляр Класса_1 и внутри себя знать о чём ей надо.

Хм... А действительно.
Фабрика и будет делать то, что я предпологал возложить на CLR.
Т.е. при первом запросе - она увидит, что Класс_1 не инициализирован, и вызовет Класс_2 для инициализациия...

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

Интерфейсы. Попытка все реализовать через интерфейсы.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38143506
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрskyANAКакая-то странная архитектура. Клиентский код не знает ни про библиотеку, ни про Класс_2. А кто о них знает, кто в итоге обратится к библиотеке, или к Классу_2? Класс_1? Тогда из-за чего весь сыр-бор?

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

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

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

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

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


В принципе тут есть что-то от ленивой инициализации. Но код не многопоточен. По идее до обращения клиентского кода статическая информация уже в ПРИНЦИПЕ должна быть. В общем нет... похоже lazy тут не подходит.

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

ЗЫ. Можно поигратся с флагом BeforeFieldInit, чтобы отключить случайный вызов.

Но пожалуй Фабрика - это отличный вариант.
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38162510
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите. Если реализовать методы и параметры через обобщенные типы так. Будет нормально ?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
    // параметры для методов
    public abstract class SomeOneArg
    { 
        public int SomeInt {get;set;}
    }

    public class SomeTwoArgs : SomeOneArg
    {
        public string SomeString { get; set; }
    }

    public class SomeOtherTwoArgs : SomeOneArg
    {
        public string SomeString { get; set; }
        public bool SomeBool { get; set; }
    }


    // Классы с методами
    public abstract class WorkClassBase<T>
        where T : SomeOneArg
    {
        public abstract void WorkMethod(T someOneArg);
    }

    public class WorkClassTwoArgs<T>: WorkClassBase<T>
        where T: SomeTwoArgs
    {
        public override void WorkMethod(T someTwoArgs)
        {
            Console.WriteLine(someTwoArgs.SomeInt);
        }

    public class WorkClassThreeArgs<T>
        ... реалиуем так же
    }



Нужно ли в методах WorkMethod делать какие-либо проверки ?
Как посоветуете улучшить код еще ?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38162669
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хватает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class GodClass
{
    public void DoAnything()
    {
       // Anything you want: fast, cheap and qualitatively
    }
}
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38162722
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAНе хватает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class GodClass
{
    public void DoAnything()
    {
       // Anything you want: fast, cheap and qualitatively
    }
}



ок добавлю :)

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

В частности вот это:

Код: c#
1.
2.
3.
4.
5.
 public abstract class WorkClassBase<T>
        where T : SomeOneArg

    public class WorkClassTwoArgs<T>: WorkClassBase<T>
        where T: SomeTwoArgs



Или все классы правильней завязать на базовый класс ?
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38166014
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Молчание )
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38170187
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрМолчание )
Народ потихоньку переваривает информацию и тихо прифигевает
Мне, например, до сих пор не совсем понятна архитектура решения...
Хотя подозреваю, что речь может идти об а-ля плагинах...
Ну или о каком-то виде "интерфейсов" для взаимодействия с Вашей библиотекой (программой/сервисом и т.д.), которая реализует стандартный набор функциональности и доступна сторонним вызовам...

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

Либо действительно пойти по пути использования синглтон фабрики, через которую будут дёргаться методы Вашего объекта, либо фабрика будет сама создавать экземпляр объекта, инициализировать его и отдавать клиентскому коду...

Архитектуру бы и задачу(не та что в сабже) распишите в общих чертах, а там подсобим...
...
Рейтинг: 0 / 0
Как обеспечить порядок выполнения двух статических конструкторов
    #38170191
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кстати, забыл добавить, в случае с фабрикой она (понятное дело) должны быть доступна для обращения к ней из клиентского кода...
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обеспечить порядок выполнения двух статических конструкторов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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