Одним словом я пытаюсь создать Lifetime manager для платформы Unity с помощью Http Session в моем проекте MVC3. Мой пример реализации пожизненного менеджера:
public class UnityPerSessionLifetimeManager : LifetimeManager
{
private string sessionKey;
private HttpContext ctx;
public UnityPerSessionLifetimeManager(string sessionKey)
{
this.sessionKey = sessionKey;
this.ctx = HttpContext.Current;
}
public override object GetValue()
{
return this.ctx.Session[this.sessionKey];
}
public override void RemoveValue()
{
this.ctx.Items.Remove(this.sessionKey);
}
public override void SetValue(object newValue)
{
this.ctx.Session[this.sessionKey] = newValue;
}
}
В моем global.asax.cs я заменил фабрику контроллера по умолчанию на свой собственный UnityControllerFactory
public class UnityControllerFactory : DefaultControllerFactory
{
private IUnityContainer container;
public UnityControllerFactory(IUnityContainer container)
{
this.container = container;
this.RegisterServices();
}
protected override IController GetControllerInstance(RequestContext context, Type controllerType)
{
if (controllerType != null)
{
return this.container.Resolve(controllerType) as IController;
}
return null;
}
private void RegisterServices()
{
this.container.RegisterType<IMyType, MyImpl>(new UnityPerSessionLifetimeManager("SomeKey"));
}
}
}
Я установил точки останова для каждой функции класса UnityPerSessionLifetimeManager
, и заметил, что когда фабрика контроллеров пытается решить зависимости моего контроллера, HttpContext.Session фактически имеет значение null, поэтому код не может быть получен из сеанса или сохранен в сеансе.
Есть идеи, почему сессия на этом этапе пуста?