如何使用AutoFac註冊全局動作過濾器?
通常建議的方法(下面列出)似乎不正確,因爲操作過濾器在應用程序啓動時解析一次,所有依賴圖初始化。但是,如果動作過濾器使用任何一次性對象(例如非直接但通過服務層的數據庫會話),它將不正確,因爲全局過濾器只創建一次,並且始終處於活動狀態,並且不會通過依賴服務處置重新創建。正確的全局動作過濾器註冊
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
var userLocatorFilter = ContainerHolder.Container.Resolve<UserLocatorAttribute>();
var userStatusFilter = ContainerHolder.Container.Resolve<UserStatusAttribute>();
var logErrorFilter = ContainerHolder.Container.Resolve<LogErrorAttribute>();
// or DependencyResolver.Current.GetService<CustomFilterAttribute>()
filters.Add(userLocatorFilter);
filters.Add(userStatusFilter);
filters.Add(logErrorFilter);
}
所以我想如果有任何一種全球性的過濾器註冊/解析過程中,將重新創建/配置它在每次請求的左右?換句話說,應該存在有限壽命的全局濾波器。
讓我知道你是否需要更詳細的解釋問題。
'ContainerHolder'是我的自定義靜態類,用於存儲Autofac容器。是的,因此我使用的解決方案與您所建議的類似,但是想知道是否有更好的解決方案。 –