Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# WinApp, запись в форму из стороннего класса, как правильно 
:(
    Опции темы
Rockie
Дата 9.11.2015, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Привет!

я хочу сделать класс-логгер, который можно бы было подключать к разным проектам. К примеру чтобы и в консольном приложении и в WinApp можно бы было написать к примеру 
Код
logger.Message("blah blah");


Вообще у меня был класс логгера который писал к примеру в консоль, ULS, в текстовый файл.. я просто закомментачивал ненужные методы. но cейчас хочу его прикрутить и в WinApp и наконец-то сделать правильно.

У меня есть рабочий вариант, который пишет из класса логгера в текстбокс формы(отбросим то что при записи на форум надо вызывать InvokeRequired, т.к. пример учебный)

Это класс логгера. Он содержит в себе экземпляр формы и конструктор, который инстанцирует эту форму(экземпляр логгера мы создадим на форме)

Код
class MyLogger
    {
        private readonly Form1 form;

        public MyLogger(Form1 form)
        {
            this.form = form;
        }

        public void Message()
        {
            this.form.LogStream = "Blah blah from MyLogger";
        }
    }


А вот собсно форма. Форма содержит свойство "LogStream", которое в Set пишет в контрол-текстбокс. А сторонний класс может к этому свойству достучаться. Ну и собсно всё, по кнопке вызывается Message() стороннего класса-логгера, который пишет на форму:

Код

public partial class Form1 : Form
    {
        private MyLogger logger;

        public string LogStream
        {
            get
            {
                return this.tbLogger.Text;
            }
            set
            {
                this.tbLogger.AppendText(value + Environment.NewLine);
            }
        }

        public Form1()
        {
            InitializeComponent();

            logger = new MyLogger(this);
        }

        private void buttonWrite_Click(object sender, EventArgs e)
        {
            logger.Message();
        }
    }


Как сделать это правильнее - в данном варианте непонятно что делать для консольного приложения - закомментачивать конструктор с формой чтоли?..

и другой вопрос - если у меня ещё один сторонний класс, как на рисунке - как мне реализовывать логгер из него? тоже передавать форму и туда, бред какой-то..

user posted image


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
chupachups
Дата 10.11.2015, 12:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: 1
Всего: 1



Нужно использовать интерфейсы. Для логера:
Код

public interface ILogger
{
    void AddListner(ILogListner listner);
    void RemoveListner(ILogListner listner);
    void WriteMessage(string message);
}

Для форм, консоли, файлов и прочего:
Код

public interface ILogListner
{
    void ProcessMessage(string message);
}

Для каждого "слушателя" логов реализуешь интерфейс ILogListner и кидаешь его в логер - AddListner(ILogListner listner).
Логер должен иметь коллекцию слушателей и когда логеру говорят WriteMessage(string message) - он пробегает по всем слушателям и вызывает у них ProcessMessage(string message)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
infarch
Дата 11.11.2015, 11:48 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Вы лучше изучите для начала что-нибудь из готовых популярных логеров. NLog, Log4net...
Если вам чисто для фана, то попробуйте свой логер сделать по аналогии. Если же вам нужно готовое рабочее решение то возьмите один из них и  не парьтесь.
PM MAIL   Вверх
Rockie
Дата 12.11.2015, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Цитата

Если вам чисто для фана, то попробуйте свой логер сделать по аналогии. Если же вам нужно готовое рабочее решение то возьмите один из них и  не парьтесь. 

infarch, ну мне и то и другое - чтобы один раз уже разобраться, и чтобы юзать в своих проектах. Часто возникает ситуация когда сначала логика пишется в консоли, а потом его надо запихнуть к примеру в asp.net вебчасть, или ещё куда.. 
Спасибо!

chupachups, воо... Спасибо!! я если что ещё спрошу тут, может посоветуете правильно ли делаю..






--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1332 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.