我能找到问题所在-这是一个愚蠢但微妙的问题…
我注册了一个currentUserService类,如下所示:
builder.Register(c => new CurrentUserService(
c.Resolve<HttpSessionState>(),
c.Resolve<IUserRepository>(),
c.Resolve<IMembershipService>())
).As<ICurrentUserService>()
.CacheInSession();
问题是
缓存会话()
,因为currentUserService依赖于iuserrepository,autopac忠实地注入了该库,但在第一个请求结束时进行了处理。
这就揭示了在连接依赖注入时需要注意的一些明显而微妙的事情:
确保高阶受抚养人始终拥有与其所依赖的服务相同或更短的寿命。在我的例子中,解决方案是更改上述代码:
builder.Register(c => new CurrentUserService(
c.Resolve<HttpSessionState>(),
c.Resolve<IUserRepository>(),
c.Resolve<IMembershipService>())
).As<ICurrentUserService>()
.InstancePerLifetimeScope();
…这会阻止当前用户服务脱离它所依赖的实例。