Я участвую в проекте, который способен подключаться к различным аппаратным устройствам «на лету». Нам назначили графический интерфейс с сенсорным экраном, поэтому у нас есть MMI для устройств.Дизайн плагина WPF GUI. Мне нужна обратная связь lil
Поскольку любое устройство (и любое устройство) потенциально может подключаться к нашей инфраструктуре, мы решили позволить сторонним разработчикам устройств создать свой собственный графический плагин. Все хорошо и денди до сих пор :)
Настоящая проблема заключается в том, что наш менеджер хочет, чтобы эти графические интерфейсы могли выполнять некоторые формы потоков управления, и он не хочет, чтобы у нас была собственная DSL. Итак, поскольку мы «Выполняя GUI в WPF, они должны иметь возможность выполнять MSIL. Это огромная угроза безопасности, и я сказал ему об этом, но, поскольку это прототип, он говорит, что все в порядке. Хорошо, хорошо.
Существует еще одна проблема: произвольная MSIL может произойти сбой или тупик, поэтому нам нужно разместить ее в каком-то асинхронном контексте. Поскольку WPF не разрешает доступ к графическому интерфейсу более чем одному потоку, мы сталкиваемся с сложным сценарием.
До сих пор я довольно кратко разбирался в том, как решить эту проблему. Лучше всего разделить часть GUI и часть кода на 2 вещи: Raw Xaml для графического интерфейса, а MSIL - в другом потоке кода. Затем мне нужно создать фасад (On runtime?), Чтобы связать GUI и MSIL вместе, отправив вызовы на потоки друг друга.
Я могу сделать это, не проблема, но я думаю, что это действительно вонючий. Вы заставляете других разработчиков использовать MVVM без кода позади, я не уверен, могу ли я поддерживать все привязки, и мне не нравится, что View и ViewModel находятся в отдельных потоках (ну, я не против, но я не уверен, что это может вызвать проблемы, так как этот дизайн будет очень прозрачным для разработчика плагинов, поэтому он не стал бы рассматривать создание потоковых файлов).
Есть ли у кого-нибудь идеи о том, как это сделать? Или мысли о требованиях? Любая обратная связь будет приятной.
Спасибо, что вложили в это свой ум. У меня были длительные дискуссии с моим другом, и я нашел много параллелей между этой проблемой и проблемой, которую O/S'es имеют при запуске кода. Если мы не умнее Microsoft, Apple или всего сообщества Nix, для этого нет никакого решения. Даже не причина запускать все в асинхронном контексте :) Лучшая ставка - проверить, протестировать и подписать плагины, прежде чем они загрузятся в графический интерфейс. Ну, это наш вывод :) Я приму этот ответ, поскольку он обеспечил лучшую обратную связь :) – cwap