AutoFacを使用してグローバルアクションフィルターを登録するには?
アクション フィルターはアプリケーションの起動時にすべての依存関係グラフが初期化された状態で解決されるため、一般的に推奨されるアプローチ (以下に一覧表示) は正しくないようです。ただし、アクション フィルターが破棄可能なオブジェクト (DB セッションなどの非直接的だがサービス レイヤー経由) を使用する場合、グローバル フィルターは一度作成され、常に存在し、依存するサービスの破棄で再作成されないため、正しく動作しません。
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);
}
だから、リクエストごとに再作成/破棄するグローバルフィルター登録/解決プロセスがあるのではないかと思いますか? 言い換えれば、寿命が限られているグローバルフィルターが必要です。
問題の詳細な説明が必要な場合はお知らせください。