TL;DR: Ако сте мързеливи, използвайте BsonSerializer.LookupSerializer
или BsonMemberMap.GetSerializer
. За да го направите правилно , уверете се, че регистрационният код се извиква веднъж и само веднъж .
Най-добрият подход за избягване на това е да се уверите, че сериализаторът е регистриран само веднъж. Добра идея е да имате някакъв глобален код за стартиране, който регистрира всичко, което е глобално за приложението веднъж и само веднъж. Това включва неща като конфигурация на инжектор на зависимости, инструменти като automapper и драйвера mongodb. Ако извикате този код само веднъж и от една точка в кода, не е нужно да се притеснявате за безопасността на нишката, мъртвите заключвания или подобни проблеми.
Конфигурационните настройки на драйвера MongoDB са безопасни за нишки, но не предполагайте, че това е вярно за всички софтуерни пакети, които може да се наложи да конфигурирате. Освен това заключването може да бъде много скъпо производителност, ако вашият код е многонишков, например в уеб приложение. И накрая, но не на последно място, това търсене, което правите, може да не е тривиално на първо място, защото някои методи трябва да обходят цялото дърво на наследяването.