我有以下全局過濾器,ISiteValidation和ICacheService通過Windsor容器注入,並設置爲Transient,因此容器不會自動處理依賴關係。這將在網站投入生產時導致資源問題。那麼,人們如何正確地處理注入到過濾器中的資源呢?兩個接口都是IDisposable,但Dispose在Action Filter超出範圍時不會被調用,並且容器將繼續保留實現。動作過濾器如何處置?
public class SiteValidationAttribute : ActionFilterAttribute
{
public ISiteValidation SiteValidation { get; set; }
public ICacheService CacheService { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Request.Url != null)
{
string host = filterContext.RequestContext.HttpContext.Request.Url.Host;
try
{
string siteId = CacheService.Get("SiteId",
() =>
SiteValidation.GetSiteId(
host));
var siteIdCookie = new HttpCookie("_site") {Value = siteId};
filterContext.RequestContext.HttpContext.Response.Cookies.Add(siteIdCookie);
}
catch (Exception)
{
throw new HttpException(404, String.Format("This site'{0}' was not found", host));
}
}
base.OnActionExecuted(filterContext);
}
}