1

そのため、サブドメイン情報に基づいてデータベース検索を実行するサブドメイン マネージャーを 実行して取得するグローバル フィルターを使用する方法について簡単に説明しました。GlobalFilters.Filters.Add(new MyFilter)

私の目標は、実行している検証が失敗した場合に、filtercontext.result を新​​しい ResultRedirect オブジェクトに設定することでした。ただし、成功した場合、このサブドメイン マネージャ オブジェクトは、残りのリクエストの間、構造マップ コンテナに保持されます。

当初、私は、グローバル フィルターが実行されたときにコントローラー オブジェクトがインスタンス化されていないと考えていたので、このサブドメイン マネージャーの結果に基づいて、コントローラーにサブドメイン オブジェクト プロパティを設定することを期待していました。

ただし、次の 2 つの delemma があります。

  1. グローバル フィルターが実行されたときにコントローラーがインスタンス化されていると思われるため、サブドメイン マネージャーを実行して要求を検証するグローバル コントローラーが検証されたとしても、サブドメイン マネージャー オブジェクトからコントローラーのサブドメイン オブジェクトを設定することはできません。コンテナに入っています

  2. 第 2 に、さらに大きな問題として、構造マップを使用してグローバル フィルター (SomeValidationAttribute : ActionAttribute) に依存関係を挿入する有効な方法が見つからないようです。

助言がありますか

4

2 に答える 2

0

GetFiltersofFilterAttributeFilterProviderは、グローバル フィルターに対してゼロ項目を返します。この特殊なケースでは、StructureMap のコンテナーを使用してグローバル フィルターを定義します。

GlobalFilters.Filters.Add(container.GetInstance<LogAttribute>());

IContainer次に、StructureMapもフィルターに挿入する必要があります。

public class LogAttribute : ActionFilterAttribute
{
    private readonly IContainer _container; 
    public LogAttribute(IContainer container)
    {
        _container = container;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        _container.GetInstance<ILogActionService>().Log("......data......");
        base.OnActionExecuted(filterContext);
    }
}

を呼び出さないと_container.GetInstance、グローバル フィルタのすべての依存関係が、プログラムの開始時に 1 回だけインスタンス化されます。

于 2015-09-05T10:36:05.093 に答える
0

1) コントローラーのコンストラクターで単純な依存関係を維持し、おそらく BeginExecute に挿入します。しかし、あなたが実際にアーカイブしようとしているものを説明する必要があると思います.あなたの解決策を推測させてはいけません.

2) GlobalFilterProvider を登録する

public class StructureMapGlobalFilterProvider : IFilterProvider
{
    public StructureMapGlobalFilterProvider(IContainer container)
    {
        _container = container;
    }

    private IContainer _container;

    public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor 

actionDescriptor)
    {
        return new List<Filter>();
    }
}

ソース: http://thecodinghumanist.com/blog/archives/2011/2/3/structuremap-global-action-filters-and-dependency-injection-in-asp-net-mvc-3

于 2013-04-23T16:54:59.083 に答える