gpt4 book ai didi

asp.net-mvc - 无法获得有效的 Unity session 生命周期管理器,ASP.NET MVC5

转载 作者:行者123 更新时间:2023-12-01 21:41:59 28 4
gpt4 key购买 nike

我已经阅读并谷歌搜索了有关此的所有内容,但似乎无法让它发挥作用。我根据这些帖子在我的 MVC5 应用程序中为 Unity 创建了一个自定义 LifetimeManager:

这是我的SessionLifetimeManager

public class SessionLifetimeManager : LifetimeManager
{
private string key = Guid.NewGuid().ToString();

public override object GetValue()
{
return HttpContext.Current.Session[key];
}

public override void RemoveValue()
{
HttpContext.Current.Session.Remove(key);
}

public override void SetValue(object newValue)
{
HttpContext.Current.Session[key] = newValue;
}
}

我只使用了几种类型,以下是UnityConfig.cs中的相关注册:

container.RegisterType<IEpiSession, EpiSession>(new SessionLifetimeManager(), 
new InjectionConstructor(config.AppServerURI, config.PathToSysConfig));
container.RegisterType<IReportRepository, EpicorReportRepository>(new TransientLifetimeManager());

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

请注意,EpicorReportRepository 通过构造函数注入(inject)依赖于 IEpiSession

public class EpicorReportRepository : IReportRepository
{
private IEpiSession session;

// DI constructor
public EpicorReportRepository(IEpiSession session) {
this.session = session;
}
// ...
}

我的问题:第一个用户/ session 连接到应用程序后,此后的每个新用户/ session 似乎仍在使用 EpiSession 对象和凭据第一个用户为他创建/注入(inject)了。这似乎是互联网上使用的常见模式,所以我想知道我错过了什么。

最佳答案

您如何测试 IEpiSession 在不同 Session 中是否相同?

尝试从不同的浏览器打开您的应用程序。如果您在同一浏览器中打开多个选项卡,则使用相同的 session 。

我检查了你的代码,它对我有用。SetResolver() 中只有一处不同:

DependencyResolver.SetResolver(
type => container.Resolve(type),
types => container.ResolveAll(types));

完整的注册代码如下:

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
var container = new UnityContainer();
container.RegisterType<IEpiSession, EpiSession>(
new SessionLifetimeManager(),
new InjectionConstructor("config.AppServerURI", "config.PathToSysConfig"));
container.RegisterType<IReportRepository, EpicorReportRepository>(new TransientLifetimeManager());

DependencyResolver.SetResolver(
type => container.Resolve(type),
types => container.ResolveAll(types));
}
}

关于asp.net-mvc - 无法获得有效的 Unity session 生命周期管理器,ASP.NET MVC5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com