다음과 같은 전역 필터가 있습니다. ISiteValidation과 ICacheService는 Windsor 컨테이너를 통해 주입되며 Transient로 설정되므로 컨테이너가 자동으로 종속성을 처리하지 않습니다. 사이트가 제작 될 때 리소스 문제가 발생합니다. 그렇다면 필터에 주입 된 자원을 적절하게 폐기하기 위해 사람들은 무엇을하고 있습니까? 두 인터페이스 모두 IDisposable이지만 Action Filter가 범위를 벗어나 컨테이너가 구현을 계속 유지할 때 Dispose가 호출되지 않습니다.조치 필터는 어떻게 폐기됩니까?
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);
}
}