结构图范围/生命周期指导?

时间:2009-08-10 21:57:32

标签: c# inversion-of-control structuremap

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

如果我坚持使用默认范围,每个插件类型的每个默认实例都会在每个请求(假设是一个Web应用程序)上有效地实例化,这是正确的吗?这会明显影响性能吗?

我考虑使用Http Session范围将此限制为每个登录用户的一个实例。但是,这将导致(至少)每个插件类型的一个实例始终存储在内存中。使用默认范围,这些实例仅在处理页面请求时保留在内存中。我不确定哪个更好。

如果您使用StructureMap,您通常如何为每种插件类型配置范围?

感谢您的任何见解,

菲尔

1 个答案:

答案 0 :(得分:7)

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

我会对Singleton配置做同样的事情,我将使用StructureMap来获取实际对象......但是当它第二次返回对象时,对象本身会将一个实例移交给它自己(在单身的术语是)。这使用了StructureMap来实现它的强大功能......但是并没有给它提供比所需更多的功率。