Як відомо, в .Net Core, на даний момент, немає AppDomain, а WCF тільки SOAP клієнт .Net Core, WCF і ODATA клієнти.

Звичайно, завдання можна вирішити і через Web Api з WebSockets для виклику подій. Але, я просто пропоную альтернативне рішення на маршалинге по TCP/IP і створення об'єктів, і виклик методів на стороні сервера за допомогою Reflection.

Ось як виглядає віддалений виклик методів і властивостей. Приклад взято звідси Основи перевантаження операторів:

// Виведемо повідомлення в консолі сервера
string typeStr = typeof(Console).AssemblyQualifiedName;
var _Console = wrap.GetType(typeStr);// Отримаємо тип на сервері по імені
// "Hello from Client" буде виведено в консолі сервера
_Console.WriteLine("Hello from Client");

// отримаємо тип по імені класу TestDllForCoreClr.MyArr
// Із збірки TestDll.dll
var MyArr = wrap.GetType("TestDllForCoreClr.MyArr", "TestDll");

// Створимо об'єкти на стороні сервера
// і отримаємо посилання на них
var Point1 = MyArr._new(1, 12, -4); // new MyArr(1, 12, -4);
var Point2 = MyArr._new(0, -3, 18); // new MyArr(0, -3, 18);

// Всі операції з об'єктами PointX відбуваються на стороні сервера
Console.WriteLine("Координати першої точки: "+Point1.x+" "+Point1.y+" "+Point1.z);
Console.WriteLine("Координати другої точки: "+Point2.x+" "+Point2.y + " "+ Point2.z);

var Point3 = Point1 + Point2;
Console.WriteLine("\nPoint1 + Point2 = " + Point3.x + " " + Point3.y + " " + Point3.z);
Point3 = Point1 - Point2;
Console.WriteLine("Point1 - Point2 = "+ Point3.x + " " + Point3.y + " " + Point3.z);
Point3 = -Point1;
Console.WriteLine("-Point1 = " + Point3.x + " " + Point3.y + " " + Point3.z);
Point2++;
Console.WriteLine("Point2++ = "+ Point2.x + " " + Point2.y + " " + Point2.z);
Point2--;
Console.WriteLine("Point2-- = " + Point2.x + " " + Point2.y + " " + Point2.z);

Читати далі →

Виклик методів через reflection

Всі програмісти Java явно або неявно користуються reflection для виклику методів. Навіть якщо ви не робили цього самі, це за вас напевно роблять бібліотеки або фреймворки, які ви використовуєте. Давайте подивимося, як цей виклик влаштований всередині і наскільки це швидко. Будемо дивитися в OpenJDK 8 з останніми оновленнями.
Читати далі →

Проект CallSharp: I/O Call Instrumentation на платформі .NET

Що мені подобається у всяких разработческих тулах, так це те, що вони не тільки допомагають вирішувати якісь завдання, але часом ще й вчать програмування. Тула, про яку я хочу розповісти – вона саме така. СаllShаrр – так називається мій проект – намагається алгоритмічно вивести ланцюжок викликів на основі набору очікуваних вхідних та вихідних даних.




Читати далі →

Лінь, рефлексія, атрибути, динамічні складання

Невеликий досвід, отриманий завдяки ліні

Роки три тому, я працював на одну фірму. Було нас 4 програміста. Один писав бізнес логіку програми. Описував він її за допомогою інтерфейсів (interface). Логічні зв'язки, залежності і т. д. Наше ж завдання було реалізувати ці інтерфейси і пов'язати з GUI. Основною проблемою в цій системі були постійні зміни структури зв'язків і параметрів. Тобто нам доводилося постійно займатися правкою і рефакторінгом.

Я людина досить ледачий. Тому прийшла думка — невже не можна якось це автоматизувати. І я сів за книжки.

перший Крок

Перша ідея була достатня явна і проста. Інтерфейси міститися в окремих файлах — так чому б не розпарсити їх і створити текстовий файл зі згенерованим класом. Так і було зроблено.

На жаль тих джерел не збереглося, але є аналог, кому цікаво, може подивитися(класи будуються на основі таблиць бази даних)
Читати далі →

Перетворення Method Reference в Method в мові Java

Уявіть, що у нас є об'єкт
Function<A, B> foo = SomeClass::someMethod;
Це лямбда, яка гарантовано є посиланням на не статичний метод. Як можна з об'єкта
foo
дістати екземпляр класу
Method
, що відповідає написаному методом?
Якщо в цілому, то ніяк, інформація про конкретному методі зберігається виключно у байткоде (всякі там інструментації я не враховую). Але це не заважає нам у певних випадках отримати бажане в обхід.

Читати далі →

Особливості програмного ProxyChanging'а в Android. Частина 1: від Jelly Bean до Lollipop

Як-то раз, для власної зручності, мені захотілося написати програму, яка змінює настройки проксі в конфігурації мереж Wifi для Android. Завдання, як мені тоді здалося, була на раз плюнути, однак, насправді, як завжди, виникли непередбачені труднощі.



Якщо ви вважаєте корисним у майбутньому знати рішення, хочете почерпнути щось для себе або у вас просто прокинулося цікавість — ласкаво просимо під кат. Там вас чекає внутрішнє пристрій класів відповідають за конфігурацію Wifi в різних версіях Android, невелика чашечка коду на Java і щіпка Reflection.

Читати далі →

CannyViewAnimator: перемикаємо стану красиво

Всім привіт! Мені дуже подобається працювати з анімаціями — в кожному Android-додатку, у створенні якого я беру участь або на яке просто дивлюся, я знайшов би місце парочці. У ще не такому далекому квітні 2016 року з моєї запису про тип класів Animation почав жити блозі компанії Лайв Тайпинг, а пізніше я виступив з доповіддю про анімація на черговому омському IT-суботнику. У цій статті я хочу познайомити вас з нашою бібліотекою CannyViewAnimator, а також занурити вас в процес її розробки. Вона потрібна для красивого перемикання видимості View. Якщо вам цікава бібліотека, або історія її створення, ну або хоча б цікаві проблеми, з якими я зіткнувся, і їх рішення, то ласкаво просимо в статтю!
Про що взагалі мова
Але спочатку наведемо для наочності ситуацію, банальну в Android-розробці. У вас є екран, а на ньому — список, який приходить від сервера. Поки прекрасні дані вантажаться від прекрасного сервера, ви показуєте лоадер; як тільки дані прийшли, ви в них дивіться: якщо порожньо — показуєте заглушку, якщо немає — показуєте, власне, дані.
Як вирішити цю ситуацію на UI? Раніше, ми в Лайв Тайпинг користувалися таким рішенням, яке коли-то підгледіли в U2020, а потім перенесли в наш U2020 MVPBetterViewAnimator, View, який успадковується від ViewAnimator. Єдине, але важлива відмінність BetterViewAnimator від його предка — це вміння працювати з id ресурсів. Але він не ідеальний.
Що таке ViewAnimator?ViewAnimator — це View, який успадковується від FrameLayout і у якого в конкретний момент часу видно тільки один з його child. Для перемикання видимого child є набір методів.
Важливим мінусом BetterViewAnimator є вміння працювати тільки з застарілим AnimationFramework. І в цій ситуації приходить на допомогу CannyViewAnimator. Він підтримує роботу з Animator і AppCompat Transition.
Посилання на проект Github
Читати далі →

Дуже зручний абстрактний адаптер для RecyclerView своїми руками

Колись, на зорі моєї кар'єри Android-розробником, я переглядав приклади вже наявних додатків і в прекрасному, немов сонечко навесні, U2020 я знайшов приклад дуже зручного адаптера. Ім'я його BindableAdapter. Довгий час я використовував його як основу своїх адаптерів для ListView і GridView, але їх ера приходить до свого завершення і настає ера RecyclerView. Цій ері потрібен новий зручний адаптер, і я спробував його зробити.

Читати далі →

Рефлексія в Caché



Тема рефлексії нечасто піднімався на форумах або блогах Caché. Бути може тому, що поняття рефлексії як таке в Caché явно не позначено. Тим не менш рефлексія в Caché присутній і може стати дуже корисним інструментом у розробці.

Читати далі →

Compile-time рефлексія D, практика

Доброго часу доби, хабр!

У минулій статті були розглянуті базові елементи compile-time рефлексії, ті цеглинки, з яких будують «справжні» метаконструкции. У цій статті я хочу показати деякі такі прийоми. Спробуємо реалізувати сигнали і слоти, схожі на ті, що в Qt, буде приблизно так:
class Foo : XObject
{
@​signal
void message( string str );
}
class Bar : XObject
{
@​slot
void print( string str ) { writefln( "Bar.print: %s", str ); }
}
void main()
{
auto a = new Foo, b = new Bar;
connect( a.message, b.print );
a.message( "hello habr" ); // Bar.print: hello habr
}

Обережно: багато коду (з коментарями).

Читати далі →