Asp.net mvc 4 StructureMap3会话作用域单例-没有会话变量?

Asp.net mvc 4 StructureMap3会话作用域单例-没有会话变量?,asp.net-mvc-4,session,sitecore,structuremap,structuremap3,Asp.net Mvc 4,Session,Sitecore,Structuremap,Structuremap3,我对StructureMap相当陌生。我正在尝试创建一个会话范围的单例类(使用带有Sitecore的MVC4)。通过谷歌搜索,我得出了以下结论: x.For<IMyClass>().LifecycleIs(new HttpSessionLifecycle()).Use<MyClass>(); x.For().LifecycleIs(新的HttpSessionLifecycle()).Use(); 问题是MyClass是用另一个类实例实例化的 x.For<ISom

我对StructureMap相当陌生。我正在尝试创建一个会话范围的单例类(使用带有Sitecore的MVC4)。通过谷歌搜索,我得出了以下结论:

x.For<IMyClass>().LifecycleIs(new HttpSessionLifecycle()).Use<MyClass>();
x.For().LifecycleIs(新的HttpSessionLifecycle()).Use();
问题是MyClass是用另一个类实例实例化的

x.For<ISomeAPIClient>()
                .HttpContextScoped()
                .Use((context) => GetApiClient(context));
x.For()
.HttpContextScoped()
.使用((上下文)=>GetApiClient(上下文));
当从MyClass调用此实例时,它似乎没有访问HttpContext会话的权限—它为null。我想我已经尝试了所有内置的生命周期,结果要么相同,要么类的行为不像会话范围的单例。

我做错了什么?

从您编写的内容来看,会话似乎没有为您的请求启用或尚未创建。您尝试在请求生命周期的哪一点实例化对象?@Marek Musielak我不完全确定。正如我所说,我对StructureMap是新手。我最初发布的文章中包含的所有代码都来自GlobalContainer配置。我的理解是,MyClass将在第一次调用时初始化,这意味着它将在会话可用的生命周期的某个部分进行初始化,因为当它被设置为简单的HttpContextScope()时会发生这种情况。相关: