首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有StructureMap3 HybridHttpOrThreadLocalScoped的HttpSessionState

没有StructureMap3 HybridHttpOrThreadLocalScoped的HttpSessionState
EN

Stack Overflow用户
提问于 2015-10-20 09:58:57
回答 1查看 215关注 0票数 0

我正在试图了解如何设置StructureMap3配置,该配置在WebApi和控制台应用程序中都可以使用,例如:

代码语言:javascript
复制
For<ISession>().HybridHttpOrThreadLocalScoped().Use(p => p.GetInstance<TestingContainer>().GetSession());

对于控制台应用程序,我希望对象的寿命与线程的寿命一样长,对于网站,我希望对象的生存期与http会话一样长。

对于MVC网站来说,这是可能的,因为HybridHttpOrThreadLocalScoped使用HttpSessionState来决定是创建新实例还是重用现有实例。

WebApi没有这个HttpSessionState,因此HybridHttpOrThreadLocalScoped不能工作。

如果我不关心控制台应用程序,那么我可能会用瞬态()或AlwaysUnique或类似的方法配置结构图。

因此,当没有HybridHttpOrThreadLocalScoped实例时,等同于HttpSessionState的是什么。

谢谢。

编辑

-to重新安排了问题..。

EN

回答 1

Stack Overflow用户

发布于 2015-10-26 09:02:54

通常,在生命周期管理方面,您应该更倾向于嵌套容器。这背后的原因正是您刚才提到的,在某些情况下,使用线程、HTTP或混合作用域都不起作用。我以前见过它引起了巨大的问题,人们认为DB连接是因为它们在其他环境中而被释放的,但在一个环境中却不是这样,而且,外露性也很好。

为此,请将每个请求要处理的依赖项设置为瞬态(默认),并在请求结束时释放嵌套容器。我在webapi 这里中写过这个工作流。此外,官方文件推荐这个努基特

对于控制台应用程序,您需要这样做:

代码语言:javascript
复制
//parent Container set up at app start
public void On_UserAction()
{
    //global container set up at app start, either use ObjectFactory (bad, deprecated and to be removed) or just keep track of it yourself.
    using(var nestedContainer = GlobalContainer.GetNestedContainer())
    {
        var dependency = nestedContainer.GetInstance<DependencyThatHandlesUserInput>();
    }
}

就这样,使用块为您处理所有的处理。

如果你还有其他问题,请问,我花了很多时间在这类事情上:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33233584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档