регистрация типа catel зависает в параллельных модульных тестах - PullRequest
0 голосов
/ 07 декабря 2018

Я перешел на Catel для IoC некоторое время назад, но когда я хочу запустить свои модульные тесты параллельно, я получаю взаимоблокировки в GetTypesEx изнутри catel.

Трассировка стека выглядит следующим образом:

Catel.Core.dll! Catel.Reflection.ReflectionExtensions.GetTypesEx (сборка System.Reflection.Assembly) Строка 40 C # Catel.Core.dll! Catel.Reflection.AssemblyHelper.GetAllTypesSafely (System.Reflection.Сборка сборки, bool logLoaderExceptions) Строка 155 C # Catel.Core.dll! Catel.Reflection.TypeCache.GetAssemblyTypes.AnonymousMethod__42_1 (сборка System.Reflection.Assembly) Строка 829 C # System.Core.dll! System.Linq.Enumerable.WhereSelectShere..MoveNext () Неизвестно System.Core.dll! System.Linq.ParallelEnumerable.ToDictionary>, System.Reflection.Assembly, System.Collections.Generic.HashSet> (System.Linq.ParallelQuery >> source, System.Func>, System.Reflection.Assembly> keySelector, System.Func>, System.Collections.Generic.HashSet> elementSelector, System.Collections.Generic.IEqualityComparer Comparer) Неизвестный Catel.Core.dll! Catel.Reflection.TypeCache.GetAssemblyTypes (System.Collections.Generic.List сборок, bool allowMultithreadedInitialization) Строка 836 C # Catel.Core.dll! Catel.RefacheseInite.Generic.IEnumerable сборки, сила bool, bool allowMultithreadedInitialization) Строка 711 C # Catel.Core.dll! Catel.Reflection.TypeCache.InitializeTypes (сборка System.Reflection.Assembly, bool forceFullInitialization, COL! Catel.Reflection.TypeCache.TypeCache () Строка 113 C # [От собственного к управляемому переходу]
[Управляемый к собственному переходу]
Catel.Core.dll! Catel.HttpContextHelper.GetHttpContext () Строка 26 C # Catel.Core.dll! Catel.Core.ModuleInitializer.GetExeConfiguration () Строка 80 C # Catel.Core.dll! Catel.Core.ModuleInitializer.Initialize () Строка 41 C # Catel.Core.dll!. (() Неизвестно [Относительно управляемого перехода] *
[Управляемый в собственный переход]
PluginTests.dll! PluginTests.AcquisitionPlugin.InitServiceManager (контекст Microsoft.VisualStudio.TestTools.UnitTesting.TestContext) Строка 103 C #

Есть идеи, как мне этого избежать?Я не осознаю, что делаю что-то в корне неправильно.Я регистрирую свои типы в методах инициализации класса (используя MStest 2)

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете попытаться инициализировать TypeCache заранее:

TypeCache.InitializeTypes(allowMultithreadedInitialization: false);

Но даже лучше: сообщите о заявке (желательно с repro!), Чтобы команда Catel могла это исправить.

...