
Mr.
30.07.2016
21:40:55
Ах да если у нас сверху public LoadAssembly(IController c) то в интерфейсе IPlugin (например) должен быть соответствющий метод согласно наследованию.
Параметр в хост? То есть обратное взаимодействие?

Vasiliy
30.07.2016
21:41:28
Да
Статистику брать например или счет передать

Google

[Anonymous]
30.07.2016
21:42:28

Дмитрий
30.07.2016
21:42:47
Красава
А я вот уже год учусь в универе

[Anonymous]
30.07.2016
21:43:48

Mr.
30.07.2016
21:44:01
Как я говорил, ты создаёшь в dll плагин-провайдере ещё один интерфейс в котором пишешь тонну методов вроде SetStatistics() и наследуешь его в основной программе. Потом перед тем как загружать плагины (например, при загрузке программы) создаёшь экземпляр из класса который наследовал этот интерфейс и когда загружаешь плагины и выполняешь методы из них, передаёшь переменную типа IController (или как ты назвёшь свой интерфейс-контроллер)
Тогда внутри плагина ты можешь получить доступ ко всем методам прописанным в IController и они будут работать с программой

Vasiliy
30.07.2016
21:44:53
Не, я не про то. Я про события

Mr.
30.07.2016
21:45:05
Аааа вот тут фишка я тебе сейчас парадокс раскажу
Я это недавно нашёл

Vasiliy
30.07.2016
21:45:20
Можно в хосте по тику опрашивать, но это не труъ

Mr.
30.07.2016
21:46:02
Если ты создашь статический класс в плагин провайдере со статическими (!) эвентами и добавишь туда нужные методы при загрузке программы, позже ты можешь их вызывать из плагинов.
Можно ещё так
Да и вообще можно много чего на самом деле вплоть до использования делегатов

Google

Mr.
30.07.2016
21:46:58
Вот тут фишка шарпа перед джавой: НЕИСТОВОЕ КОЛИЧЕСТВО РЕАЛИЗАЦИИ ПЛАГИНОВ
При этом ты свободно можешь даже добавлять в эвенты методы из плагинов
Но тогда нужно будет позаботится об конфликтах которые потенциально могут возникнуть, но это уже логика программы и плагинов

Vasiliy
30.07.2016
21:48:30
Есть экземплы?

Mr.
30.07.2016
21:48:44
Где-то у меня был, я писал шото подобное

Vasiliy
30.07.2016
21:49:06
С событиями и делегатами

Mr.
30.07.2016
21:50:55
// так что там думать, просто в программе
public delegate MyDelegate();
// (чёто забыл как делегаты объявлять, утсал наверн)
public static class EventProvider
{
public static event MyDelegate OnSomething;
public static void Something() {
—------OnSomething();
}
}
тогда при загрузке программы
PluginProvider.EventProvider.OnSomething += () { govno; };
ах да я забіл
отредактирую сообщение
Готово
Естественно можно даже наколупать дров и сделать так логгинг

Vasiliy
30.07.2016
21:54:55
Кароч хз, надо вникнуть. У меня с событиями вяло
И делегатами. Не самая легкая тема дотнета

Mr.
30.07.2016
22:02:18
public delegate VoidDelegate(string msg);
public class Log
{
private string _pattern;
private string _source;
public static event VoidDelegate OnInfo;
public Log(string source) {
—------_source = source;
}
public void Info(string msg) {
—--File.WriteText("program.log", $"{DateTime.UtcNow() INFO@{_source}:{msg}");
—------OnInfo?();
}
}
Неплохой логгинг
Кстати кто не знал - о да, я пока не юзал но так должно работать. Знак вопроса перед скобками тоже должен работать
Боже сколько сахара

Vasiliy
30.07.2016
22:06:44
Знак вопроса это что

Mr.
30.07.2016
22:08:31
Ты что не читал версию 6?

Google

Mr.
30.07.2016
22:08:46
Это проверка if (obj != null)

Vasiliy
30.07.2016
22:09:37
Не-а
Годно
Точнее кусками читал

Mr.
30.07.2016
22:10:25
Можно работать так (но не нужно)
if (obj != null) obj.Method();
но если никакие ошибки бросать не надо (вообще если вы бросаете ошибку когда кто-то null - это заменимая практика) то можно obj?.Method();
(С) Владик, 14 лет

Дмитрий
30.07.2016
22:17:42
Дима 18 лет. Слишком много умных и непонятных слов

Mr.
30.07.2016
22:21:17
Вообще говоря, события это обычные триггеры и полная универсальная реализация паттерна Обсервер
Да я знаю даже шаблоны разработки
Ты просто создаёшь делегат (делегат это по сути класс содержащий один метод, реализация анонимного метода на яву, хрень позволяющая штамповать фабрично методы) (на самом деле ЭТО КЛАСС - ВОТ ЭТО ПОВОРОТ) и указываешь его как тип для эвента, затем пихаешь методы с такими же аргументами в этот эвент. Эвент может вызывать только класс-родитель, чтоб кто попало в своих плагинах как раз таки к примеру не мог вызвать эвент смерти босса.
МАТАН ВАН ЛАВ
да я таки устал, пойду спать
то чуство, когда твои костыли растущие из жопы сегодня особо криво попадают по клавиатуре

[Anonymous]
31.07.2016
06:24:41
хах)

Сирожа
31.07.2016
07:41:58
@TaylerNest красиво стелишь, фраерок ?
А если серьезно, то реально чотко сказано ?
Ни добавить ни убавить ?

Mr.
31.07.2016
07:45:48
Датские композиторы?

Google

Donald
31.07.2016
07:48:27
Книжки читал значит

Сирожа
31.07.2016
07:48:59
Может быть

Mr.
31.07.2016
07:49:37
Ой всё, прон с кортаной...

Сирожа
31.07.2016
07:52:03
Бодрящая композиция

Vasiliy
31.07.2016
09:01:10
Ой всё, прон с кортаной...
Есть EventArgs, есть плагины, есть хост, допустим, я передаю в EventArgs на стороне плагине две строки и число, но как в хосте распознать переданные аргументы и обработать?
"EventArgs e" содержит ведь 4 базовых метода, это понятно, я чую что тут интерфейс подъехать должен грамотно, как?
я жидко сейчас сделал, как нуб, передал явно три переменных, но хотелось бы как профи, грамотно и красиво через EventHandler

Mr.
31.07.2016
09:06:21
ааааа
вот как
тогда тебе не нужно явно создавать делегат

Vasiliy
31.07.2016
09:06:39
погодь

Mr.
31.07.2016
09:06:42
в шарпе уже существует делегат именно с таким именем

Vasiliy
31.07.2016
09:06:51
я сделал это
смотри
я кажись понял

Mr.
31.07.2016
09:07:00
он принимает object и EventArgs

Vasiliy
31.07.2016
09:07:19
нужно в провайдере объявить класс унаследованный от EventArgs
и реализовать его в хосте

Mr.
31.07.2016
09:07:30
тебе опять надо наследовать EventArgs и передавать объект

Vasiliy
31.07.2016
09:07:31
тогда в качестве параметра я смогу его принять в хосте

Google

Mr.
31.07.2016
09:07:33
да

Vasiliy
31.07.2016
09:07:36
еееееее

Mr.
31.07.2016
09:08:03
всегда если хочешь сделат обратное взаимодействие тебе надо интерфейс в библиотеке-правайдере и его реализация в хосте
всё сводится имено к этому

Vasiliy
31.07.2016
09:08:30
да, я утром прочитал твою писанину и сделал все четко
спасибо тебе

Mr.
31.07.2016
09:08:41
норм) нз

Vasiliy
31.07.2016
09:09:03
с делегатами и событиями наконец-то разбибикался, а то все откладывал, мозги кипели

Mr.
31.07.2016
09:09:08
а что ты пишешь на самом деле если не секрет?

Vasiliy
31.07.2016
09:09:46
телеграмм ботов под заказ планирую писать, нужно где то стату с них смотреть, платежки и контролировать их
они на моем хосте жить будут, но глупо их в службах держать, нужен хост софт админка

Mr.
31.07.2016
09:10:14
апи телеграмма кривоватое
если не писать своё

Vasiliy
31.07.2016
09:10:43
его подлечили недавно

Mr.
31.07.2016
09:10:50
ооооо

Сирожа
31.07.2016
09:11:02
Надо бы запробовать

Mr.
31.07.2016
09:11:14
а я бота для дискорда пишу

Сирожа
31.07.2016
09:11:31
Что такое дисковод?

Vasiliy
31.07.2016
09:11:33
круто, что бы это не означало

Mr.
31.07.2016
09:11:36
ору
дискорд эт типа тоже такой чат но больше для стримеров и геймеров
Эта группа больше не существует