我有一個購物車服務IShoppingCartService
是與Ninject定義爲InRequestScope
噴射需求範圍的對象爲MVC ActionFilterAttribute
this.Bind<IShoppingCartService>().To<ShoppingCartService>().InRequestScope();
它加載用戶的購物車,並在內部對其進行緩存。一旦請求結束,服務對象就會消失。
我需要訪問ActionFilter
內的購物車,所以我使用了[Inject]
屬性。
public class MyActionFilterAttribute : ActionFilterAttribute
{
[Inject]
public IShoppingCartService ShoppingCartService
{
get; set;
}
}
然後我就可以像這樣
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var cart = ShoppingCartService.ShoppingCart;
...
}
使用它在行動過濾器現在對於怪異的一部分。這一直工作一年或更長時間 - 然後突然(最近升級Ninject和MVC後)我注意到購物車正在緩存(即不是InRequestScope
)。
在進一步的研究中,我看到ActionFilters是單身人士(我驗證了這一點,因爲構造函數只被調用過一次)。所以一旦購物車的一個實例被加載,它就永遠被鎖定。
所以我的問題是 - 這究竟是如何工作的? Ninject或MVC最近有什麼變化可以讓它在之前工作。
我修復,現在是做到以下幾點:
public IShoppingCartService ShoppingCartService
{
get
{
var scs = (IShoppingCartService) DependencyResolver.Current.GetService(typeof(IShoppingCartService));
return scs;
}
}
我真的很困惑,雖然爲如何以往任何時候都可以工作 - 它肯定沒有。我應該做些什麼呢?