Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778

Singletone для Class library

29.10.2019, 16:42. Показов 4890. Ответов 98
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
приветствую всех,

Каждый раз в каждом class где я работаю с class library я создаю объект.
Говорят это не есть хорошо.

Например:
C#
1
2
3
4
5
6
7
8
9
10
Public class Wehicle
{
   public Wehicle()
 
             {
                    WehicleFrame = new Frame();
             }
 
              //далее пользуюсь различными методами класса Frame
}
таким же образом пользуюсь в другом классе

C#
1
2
3
4
5
6
7
8
9
10
Public class Ship
{
   public Ship()
 
             {
                    ShipFrame = new Frame();
             }
 
              //далее пользуюсь различными методами класса Frame
}
говорят это плохо, нужно сделать singleton.

Вопрос, как сделать singleton из класса Frame?

спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2019, 16:42
Ответы с готовыми решениями:

Intellisense и autocompletion в библиотеках класса (Class Library)
Глупый вопрос. Поэтому задаю здесь, хотя не совсем уж и начинающий. Создал проект из шаблона Class Library (что бы сборочку dll получить)...

Работа с DirectX: Output Type of Class Library
Доброго времени суток. Я новичок в DirectX и C#. Скачал SharpDX с примерами. Эти примеры не запускаются. Выдаёт следующее сообщение: A...

Как узнать путь к ресурсу сборки Class Library?
Здравствуйте, я разрабатываю addin для Excel. В проект addin`а я добавил ресурс: шаблон Excel. Хочу открыть его средствами...

98
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 12:51
Студворк — интернет-сервис помощи студентам
Bulky, синглтоны - тоже антипаттерн. Очень не желательно их использовать. Это чревато неявной связанностью кода.

Синглтон можно сделать так:

C#
1
2
3
4
5
6
7
8
public class Something
{
    public static readonly Something Instance = new Something();
 
    private Something()
    {
    }
}
Соответственно, получить доступ к этому делу в любом месте кода можно так:

C#
1
Something.Instance
Правильным решение является внедрение зависимостей. Но у меня есть сомнения, что вы станете разбираться с тем, что это такое.

Конкретно по вашим мутным классам Watching_A. Там что-то про базы данных. Такие вещи действительно выносятся в отдельные классы. И сами эти классы должны открывать и закрывать подключение к базе в момент, когда с базой надо поработать. Постоянно держать подключение открытым не надо. Погуглите про паттерн "Репозиторий".
2
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 12:54  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Конкретно по вашим мутным классам Watching_A. Там что-то про базы данных. Такие вещи действительно выносятся в отдельные классы. И сами эти классы должны открывать и закрывать подключение к базе в момент, когда с базой надо поработать. Постоянно держать подключение открытым не надо. Погуглите про паттерн "Репозиторий".
В том то и штука вся, что надо.

Открыто одно соединение и все классы рабоатют с одним соединением. Это главное условие.
Асинхронно или синхронно это уже другой вопрос.
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 12:57
Цитата Сообщение от Bulky Посмотреть сообщение
В том то и штука вся, что надо.
Штука в том, что не надо. Можете объяснить почему считаете иначе? Кто и зачем такое условие поставил?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 13:06  [ТС]
Usaga,

Честно говоря затрудняюсь я как прикрутить это все к ADC
спасибо за код, можете в проекте показать как мне синглетон из ADC сделать? Хочу потетстить что получится.
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 13:15
Bulky, я выше уже пример привёл как синглтон сделать.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 13:17  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Bulky, я выше уже пример привёл как синглтон сделать.
Честно говоря не связываю это никак с ADC. И где этот класс вообще должен быть.
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 13:22
Что, настолько всё плохо?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 13:28  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Что, настолько всё плохо?
ладно, проехали бывайте. Началась болтовня ни о чем. Как в прошлом году одна болтовня была, так и сейчас.
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 13:31
Bulky, ага. Почитайте учебник уже. Если вы не можете просто поле статическое объявить и конструктор закрытым сделать по предоставленному примеру, то это вообще полный швах.
2
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 13:46  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Bulky, ага. Почитайте учебник уже. Если вы не можете просто поле статическое объявить и конструктор закрытым сделать по предоставленному примеру, то это вообще полный швах.
Вам бы "гуру" сходить на буржуйский stackoverflow к волкам. Вам быстро там "швах" прикрутят.
А тут среди чайников вы конечно знаток по референсированию.
1
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
14.02.2020, 13:54
Bulky, спасибо за похвалу) Обязательно приму к сведению) А вы пока постарайтесь добавить статическое поле в класс. Может получится.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
14.02.2020, 18:03
Цитата Сообщение от Bulky Посмотреть сообщение
Просто не только классы должны быть public но и поля тоже. Имею ввиду инциализацию объектной переменной.
Поля могут быть публичными, но не должны быть таковыми.
Для внешнего взаимодействия с типом должны использоваться свойства.

Добавлено через 35 минут
Цитата Сообщение от Bulky Посмотреть сообщение
из той же оперы,
Типы Watching_A и Watching_B не должны сами создавать экземпляр ADC.
Они должны получать его в конструкторе.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class Watching_A
    {
        private readonly ADC Adc;
        public Watching_A(ADC adc)
        {
            //adc = new ADC(DBTypes.DataBase_689, "Auxiliary_DB", 3, 1); // creation of instance  of ADC
 
            Adc = adc;
 
            Adc.OpenDB(); // usage example of method "OpenDB"
 
            Adc.insert(); // ЧТОБЫ ВЫПОЛНИТЬ insert ПРИХОДИТСЯ В КАЖДОМ КЛАССЕ ДЕЛАТЬ ССЫЛКУ НА ОБЪЕКТ.
 
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
    public class Watching_B
    {
        private readonly ADC Adc;
        public Watching_B(ADC adc)
        {
            //Adc = new ADC(DBTypes.DataBase_689, "Auxiliary_DB", 3, 1); // creation of instance  of ADC
            Adc = adc;
 
            Adc.OpenDB(); // usage example of method "OpenDB"
 
            Adc.PullOut(); // ЧТОБЫ ВЫПОЛНИТЬ insert ПРИХОДИТСЯ В КАЖДОМ КЛАССЕ ДЕЛАТЬ ССЫЛКУ НА ОБЪЕКТ.
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public class MainWindowViewModel
    {
 
        private readonly Watching_A WatchingA;
        private readonly ADC Adc;
 
        //private MainWindowViewModel()
        //{
        //    _watching_A = new Watching_A();
        //}
 
        public MainWindowViewModel(ADC adc)
        {
            Adc = adc;
            WatchingA = new Watching_A(Adc);
        }
Добавлено через 3 минуты
Цитата Сообщение от Bulky Посмотреть сообщение
можете в проекте показать как мне синглетон из ADC сделать? Хочу потетстить что получится.
В данном случае синглтон не нужен.
Нужно создать экземпляр и передавать его.
1
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 18:05  [ТС]
Элд Хасп,

как лучше сделать? В классе Watching_A получить adc выполнить OpenDB(); а потом передавать в ViewModel и другие классы?

Весь сок в том, что OpenDB() может исполняться только один раз. это требование по library.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
14.02.2020, 18:21
Цитата Сообщение от Bulky Посмотреть сообщение
как лучше сделать? В классе Watching_A получить adc выполнить OpenDb(); а потом передавать в ViewModel и другие классы?
У вас много путаницы поскольку нет явно выделенной Модели.

Судя по названию и параметрам AВС работает с БД.
Это скорее это Контекстная Модель EF. Если это так то, она относится к слою приложения лежащему ещё ниже чем Model.

А что из себя представляют типы Watching я даже примерно по коду понять не могу. Может это и есть Модель...?

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


И очень много проблем вы сами себе создаёте конструируя приложение "Сверху вниз" - от View к данным.
Приложение создаётся наоборот "Снизу вверх": сначала хранилище данных, потом слой работающий с этим хранилищем, над ним Model уже из MVVM, потом интерфейсы VM и только после этого View.
При таком подходе не появляется неясностей что, как и кому передать, кто за что отвечает.

Добавлено через 2 минуты
Цитата Сообщение от Bulky Посмотреть сообщение
как лучше сделать?
Я вам уже писал.
Давайте для примера, для получения вами опыта, сделаем приложение "с нуля под ключ".

Напишите, что за данные у вас, какая их структура, где они хранятся.
Не из реального проекта, а такой пример реализация которого принесла вам пользу и понимание.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
14.02.2020, 18:31
Цитата Сообщение от Bulky Посмотреть сообщение
А тут среди чайников вы конечно знаток по референсированию.
Usaga, знаток не только среди чайником.
Помогает много и по делу.
Если вам непонятно, что он советует, то лучше задумайтесь над повышением своего уровня знаний, или уровня общения чтобы корректно продолжать дискуссию.

Если интересно посмотрите темы где мне Usaga, очень существенно помог и продолжает помогать.
https://www.cyberforum.ru/ado-... 67342.html
https://www.cyberforum.ru/ado-... 67914.html
Пример создания приложения "Работа с комнатами в студенческих общежитиях" [WPF, SQLite, Элд Хасп]
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
14.02.2020, 18:32  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
вам уже писал.
Давайте для примера, для получения вами опыта, сделаем приложение "с нуля под ключ".
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если вам непонятно, что он советует, то лучше задумайтесь над повышением своего уровня знаний, или уровня общения чтобы корректно продолжать дискуссию.
Я может тоже знаток своего дела, но не понтуюсь среди чайников как в прочем и вы.
1
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
15.02.2020, 18:46  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
типы Watching_A и Watching_B не должны сами создавать экземпляр ADC.
Они должны получать его в конструкторе.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Watching_A
    {
        private readonly ADC Adc;
        public Watching_A(ADC adc)
        {
            //adc = new ADC(DBTypes.DataBase_689, "Auxiliary_DB", 3, 1); // creation of instance  of ADC
 
            Adc = adc;
 
            Adc.OpenDB(); // usage example of method "OpenDB"
 
            Adc.insert(); // ЧТОБЫ ВЫПОЛНИТЬ insert ПРИХОДИТСЯ В КАЖДОМ КЛАССЕ ДЕЛАТЬ ССЫЛКУ НА ОБЪЕКТ.
 
        }

А что сделать со строкой вы закомментили? adc = new...
Она очень важна т.к. вводит нужные парметры
Т.к. важен не только доступ к методам ADC, а и параметрирование во время исполнения openDB().
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
15.02.2020, 19:14
Цитата Сообщение от Bulky Посмотреть сообщение
А что сделать со строкой вы закомментили? adc = new...
Она очень важна т.к. вводит нужные парметры
Т.к. важен не только доступ к методам ADC, а и параметрирование во время исполнения openDB().
Мне трудно ответить на ваш вопрос - я не могу понять структуру вашего приложения.
Выше вы писали, что метод openDB() должен вызываться однократно в приложении.
Если это так, то вызывать его надо один раз при создании экземпляра в App.
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
16.02.2020, 05:40
Bulky, вы так и не озвучили какая-такая сила вас заставляет открывать ОДНО подключение к базе и держать его до закрытия приложения. Попытка сэкономить на ничём? Про пулы подключений в ADO.NET вы не слышали? Некогда отвлекаться на ерунду, надо синглтон вкорячивать, чтобы шарить подключение по всему приложению?
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.02.2020, 08:55
Наверное попытка следовать инструкциям разработчика? Именно раз открыть DB с открытием App и именно раз закрыть DB вместе с закрытием App.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2020, 08:55

Как искусственно вызвать exception в Class Library (пока пустой)
Привет! Нужно протестировать обработку Exception в project Class Library. Проект пока пустой. Как в нем исcкуственно вызвать Exception? ...

Вопрос из теста: A project with an Output Type of Class Library cannot be started directly
Вы проверяете код, написанный вашим коллегой. При компиляции Windows-приложения появляется следующее сообщение: A project with an Output...

Есть Class library (с работающим кодом) как найти то, что запускает этот код?
Привет! Есть Class library ( с работающим кодом) как найти то, что запускает этот код? public classB { int i = 30;

Можно ли в class library "запихать" интерфейс?
вопрос в шапке. ну в плане "не рекомендуется" и т.п

Нужно составить регулярное выражение для поиска <div class="market_row_name"> и <div class="market_row_price">
Заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru