2009-08-10 40 views
6

是否有任何理由从默认范围(瞬态?)切换到其他东西,除了需要控制功能原因的范围(例如Singleton)?结构图范围/生命周期指导?

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

我已经考虑过使用Http Session范围来限制每个用户登录时的一个实例。但是,这将导致每个用户在任何时候都会在内存中存储每个插件类型的(至少)一个实例。使用默认范围时,这些实例只能在处理页面请求时保存在内存中。我不确定哪个更好。

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

感谢任何见解,

菲尔

回答

7

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

我会为Singleton配置做同样的事情,我会使用StructureMap来获取实际的对象......但是当它第二次返回对象时,对象本身会将实例交给自己(单身条款)。这使用StructureMap来实现它的功能......但并没有给它比需要的更多的功能。

+0

感谢您的深思熟虑的回应。你对单身人士的看法很有趣,我也会考虑这一点。 – 2009-08-11 21:55:31