2

モデルの状態をサービスに注入できるようにしたい。

サービス

public ThirdPartyService(IValidationDictionary dict)
{
    // IValidationDictionary, in this case is a ModelStateWrapper object 
    // I created to wrap model state
}

登録

builder.Register(x => new ModelStateWrapper(x.Resolve<ControllerType>().ViewData.ModelState))
       .As<IValidationDictionary>().InstancePerHttpRequest();

何か案は?

4

1 に答える 1

2

これは、InstancePerHttpRequest としては意味がありません。

単一の Http リクエスト中に、多数のコントローラーが存在する可能性があり、多数のモデル状態が存在する可能性があります。ControllerContextたとえば、 で参照を介して現在のオブジェクトにアクセスしたとしても、HttpContext.Current生成されるコードは設計上、バグや誤動作が発生しやすくなります。

私がお勧めするのは、インメモリ サービスのようなリポジトリを作成して、現在のすべての ModelState を格納し、次のようなコントローラー アクション キーでそれらを取得することです (単純な愚かな例)。

interface IHttpRequestModelStates
{
   ICollection<string, ModelState> ModelStates {get; set;}
   // you can retrieve Controller:Home / Index  model state 
   // using  ModelStates["HomeIndex"]
}
于 2012-09-19T11:16:04.260 に答える