如何检测mongodb序列化程序是否已注册?

joe*_*joe 13 mongodb

我为mongoDB创建了一个自定义序列化程序.我可以注册它,它按预期工作.

但是我的应用程序有时会抛出错误,因为它尝试两次注册序列化程序.

如何检测序列化程序是否已经注册,从而阻止我的应用程序再次注册?

mne*_*syn 3

TL;DR:如果你很懒,请使用BsonSerializer.LookupSerializerBsonMemberMap.GetSerializer。为了正确执行此操作请确保注册代码被调用一次且仅调用一次

避免这种情况的最佳方法是确保序列化器仅注册一次。最好使用一些全局启动代码来注册应用程序全局的任何内容一次,并且仅注册一次。其中包括依赖注入器配置、自动映射器和 mongodb 驱动程序等工具。如果您仅从代码中的单个点调用此代码一次,则无需担心线程安全、死锁或类似问题。

MongoDB 驱动程序配置设置是线程安全的,但不要假设您可能需要配置的所有软件包都是如此。此外,如果您的代码是多线程的(例如在 Web 应用程序中),锁定的性能代价可能非常昂贵。最后但并非最不重要的一点是,您正在执行的查找首先可能并不简单,因为某些方法需要遍历整个继承树。

  • 你好,谢谢你的回答。是的,我同意最好只注册一次。我们遇到的问题是,我们编写了许多并发运行的集成测试,因此我们无法在不更改相当多测试的结构的情况下仅运行一次注册代码。这就是为什么支票有帮助。当我使用 LookupSerializer 方法时,我得到一个 IBsonSerializer,但我仍然不确定如何确定它是否已注册。你能帮我吗? (4认同)