Я регистрирую нужный тип в Autofac как InstancePerLifetimeScope:
builder.RegisterType<WebSecurityContext>()
.AsSelf()
.InstancePerLifetimeScope();
и разрешить его через интерфейс:
builder.Register<IApplicationContext>(context =>
{
return context.Resolve<WebSecurityContext>();
})
.As<IApplicationContext>();
Я ввожу ApplicationContext в свой контроллер WebAPI:
public class MedicalCenterController : BaseApiController
{
private readonly IApplicationContext applicationContext;
public MedicalCenterController(IApplicationContext applicationContext)
{
this.applicationContext = applicationContext;
}
ApplicationContext имеет значение MedicalCenterId. Это значение должно измениться после выбора нового медицинского центра в пользовательском интерфейсе.
Изменение MedicalCenterId происходит в фильтре действий, который также содержит необходимый контекст.
public class MedicalCenterAttribute : ActionFilterAttribute
{
public IApplicationContext ApplicationContext
{
get;
set;
}
public override void OnActionExecuting(HttpActionContext filterContext)
{
.....
ApplicationContext.SetMedicalCenterId(medicalCenterId);
}
}
Но после этого ApplicationContext продолжает иметь прежнее значение MedicalCenterId в MedicalCenterController и других контроллерах.
Почему autofac использует разные экземпляры в разных классах, хотя я использую объект InstancePerLifetimeScope?
Спасибо.
MedicalCenterId
было значением, связанным с каждым пользователем/сеансом. На самом деле не существует жизненного цикла, связанного с этой концепцией. Если бы это был я, я бы реализовал свойWebSecurityContext
, чтобы получить это значение из текущего HttpSession. - person Jim Bolla   schedule 18.08.2014