Операция не поддерживается на этом исключении платформы на Xamarin iOS - PullRequest
2 голосов
/ 06 мая 2020

Я использую контейнер DryIo C, и при попытке разрешить одну из реализаций получаю ошибку ниже:

Операция не поддерживается на этой исключительной платформе на Xamarin iOS

Разрешение работает нормально в первый раз, но когда я пытаюсь вызвать команду resolve во второй раз, он выдает это исключение.

Ниже показано, как я регистрируюсь:

container.Register<IFoo, Foo>(Reuse.ScopedOrSingleton);

Разрешить вызов:

container.Resolve<IFoo>()

Я проверил, что в Github уже есть сообщение об этой ошибке.

Согласно одному из комментариев к этому обсуждению, которое я реализовал под кодом, и после этого, похоже, он работает нормально, но я не уверен, какова цель установки этого правила и есть ли какие-либо недостатки для настройки это правило.

var container = new Container(rules => rules.WithoutFastExpressionCompiler());

1 Ответ

0 голосов
/ 06 мая 2020

Xamarin iOS не поддерживает компиляцию IL Emit и DynamicMethod, которая является механизмом DryIo c по умолчанию для создания графа объектов (посредством вызова скомпилированного делегата). Но компиляция может быть заменена интерпретацией, «приносящей в жертву» часть компилируемой делегированной производительности. Жертва не так проста и зависит от вашего случая, более того, в любом случае для первого разрешения используется интерпретация, потому что сама компиляция является дорогостоящей. Для получения более подробной информации и показателей производительности вы можете посмотреть здесь: https://github.com/dadhi/DryIoc/issues/199#issuecomment -573291497

Примечание: DryIo c использует собственную специализированную модель интерпретации и не полагается на System.Linq.Exptessions.Expression.Compile(preferInterpretation: true), который делает это намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...