我的ASP.NET Core(2.1)应用程序中有一个服务需要为单例,因为我需要在应用程序的整个生命周期中都将其保留在内存中。该服务对某些不需要单例的存储库具有依赖性,我想将它们定义为瞬态,但是当您将瞬态依赖性注入到单例服务中时,ASP.NET Core不喜欢它。尽管我还是这个新手,但我可以理解为什么。但是我的问题是:处理这种情况的正确方法是什么?我可以使我的存储库单身,这将满足ASP.NET Core。或者,我可以尝试在需要时使用服务提供商来获取存储库。但是我正在寻找一种“最佳实践”方法。任何建议将不胜感激。
谢谢!
答案 0 :(得分:0)
正如@CamiloTerevinto在评论中指出的那样,很难在不进一步了解实际操作的情况下为您提供精确的指导。不过,我可以告诉您一些一般情况。
首先,单例以两种形式出现:过于简单的事情没有多份副本是没有意义的,或者过于复杂的事情使得拥有多份副本会很麻烦。介于两者之间的任何频谱都应该是请求范围内的或瞬态的。重要的是,将数据保留在内存中不是使用单例作用域的有效理由。您可以从具有 any 生存期的对象使用内存缓存(甚至更好:分布式缓存)。在对象上需要长期存在的状态几乎总是表明类设计不良。
第二,具有讽刺意味的是,如果有的话,您的存储库实际上应该是具有单例作用域的存储库。存储库通常需要数据库连接,并且应该尽可能长寿或实用。
但是,不要只是继续使您的存储库单身并称其为一天。您应该首先停止并评估您当前的单例类是否真的应该在该范围内。然后,根据您的应用程序,最好将repos请求范围设置为最佳,这仍然意味着您不能直接注入它们。