【发布时间】:2015-02-25 09:17:50
【问题描述】:
Ninject 不为网站提供 InSessionScope 绑定,因此我们创建了自己的扩展:
public static IBindingNamedWithOrOnSyntax<T> InSessionScope<T>(this IBindingInSyntax<T> parent)
{
return parent.InScope(SessionScopeCallback);
}
private const string _sessionKey = "Ninject Session Scope Sync Root";
private static object SessionScopeCallback(IContext context)
{
if (HttpContext.Current.Session[_sessionKey] == null)
{
HttpContext.Current.Session[_sessionKey] = new object();
}
return HttpContext.Current.Session[_sessionKey];
}
在我们使用标准的本地 SessionStore 之前,此扩展程序运行良好。
但是我们更改了 SessionStore,现在我们使用“AppFabricCacheSessionStoreProvider”,并且该存储不再在本地机器上,而是在服务器上。
问题是 Ninject 试图解析一个对象的引用,该对象被序列化和反序列化并且来自服务器而不是来自本地内存,因此 ninject 找不到引用。结果是,ninjects 总是创建一个新的对象,而 SessionScope 不再起作用。
编辑1:
我们正在使用此功能
https://msdn.microsoft.com/en-us/library/hh361711%28v=azure.10%29.aspx
在这里我可以使用标准的“HttpContext.Current.Session”对象,列表内容存储在服务器上而不是本地机器上。
【问题讨论】:
-
可以添加app fabric的代码吗?
-
AppFabric 没有代码 - 它只是 web.config 中的一个设置,然后所有 SessionData 都存储在服务器上,而不再存储在本地计算机上。我需要以某种方式重写 InSessionScope 扩展,但我不知道如何
-
这正是我的问题,您的扩展程序中的代码是什么。因为无论您在 web.config 中连接什么,HttpContext.Current 都不会返回 AppFabric 缓存。无论如何,您拥有哪个版本的 AppFabric? (1.0 或 1.1)
-
AppFabric 缓存版本 1.1
-
你添加的链接没有说可以使用'HttpContext.Current.Session'?
标签: c# asp.net-mvc ninject ninject.web.mvc ninject-extensions