C# 结构图范围/生命周期指南?

C# 结构图范围/生命周期指南?,c#,inversion-of-control,structuremap,C#,Inversion Of Control,Structuremap,除了出于功能原因(如单例)需要控制范围外,是否有任何理由从默认范围(瞬态?)切换到其他范围 如果我坚持使用默认范围,那么每个插件类型的每个默认实例都会在每个请求(假设是一个web应用程序)上得到有效实例化,对吗?这会显著影响性能吗 我考虑过使用Http会话作用域来限制每个登录的用户只能有一个实例。然而,这将导致(至少)每个插件类型的一个实例始终存储在每个用户的内存中。使用默认作用域,这些实例将仅在处理页面请求时保存在内存中。我不确定哪一个更好 如果您使用StructureMap,通常如何为每个插

除了出于功能原因(如单例)需要控制范围外,是否有任何理由从默认范围(瞬态?)切换到其他范围

如果我坚持使用默认范围,那么每个插件类型的每个默认实例都会在每个请求(假设是一个web应用程序)上得到有效实例化,对吗?这会显著影响性能吗

我考虑过使用Http会话作用域来限制每个登录的用户只能有一个实例。然而,这将导致(至少)每个插件类型的一个实例始终存储在每个用户的内存中。使用默认作用域,这些实例将仅在处理页面请求时保存在内存中。我不确定哪一个更好

如果您使用StructureMap,通常如何为每个插件类型配置作用域

谢谢你的洞察力


Phil

我保留了默认范围。这意味着每一个请求(每个用户或多个用户)我都有一个对象实例在手。这意味着每次都会发出一个新的请求。保持会话状态是我更喜欢有更具体控制的事情。出于这个原因,我可能会在服务层上抛出一个缓存层,并将StructureMap返回的对象粘贴到其中。然后,我可以查询缓存中已经实例化(现在已序列化)的对象,并选择从何处获取对象


对于单例配置,我也会做同样的事情,我会使用StructureMap来获取实际的对象……但是当它第二次返回对象时,对象本身会将一个实例传递给自己(也就是单例)。这使用了StructureMap的强大功能…但并没有给它带来超出需要的强大功能。

感谢您深思熟虑的回复。你对单身的看法很有趣,我也会考虑到这一点。