.NET MVC 2アプリケーション内でStructurMap(2.6.1にアップグレード)とJimmy Bogard's Smart Model Bindersを使用しています。私もadapting a technique by Dominic Pettiferです。スマートモデルのバインダーを使用して、選択リストを再投入する必要のあるポストバックシナリオのビューモデルにDIを挿入することができます。StructureMapとNET MVC 2を使用したTryGetInstanceの問題
StructureMap
についてはほとんど分かりませんが、私が得た問題の1つは、パラメータのないコンストラクタによるviewModelバインディングのstructuremap 202 no instance defined error
でした。
私のIOCMOdelBinder class
では、GetInstance()
の代わりにTryGetInstance()
を使用しようとしています。前者は、modelTypeと一致しない場合はnullを返します。基本的に、登録済みのインスタンスが見つからない場合は、デフォルトのモデルバインダーに戻ります。
マイオーバーライドCreateModel
クラスは次のようになります。
protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{
var myInstance = ObjectFactory.TryGetInstance(modelType);
if (myInstance != null)
{
return myInstance;
}
else
{
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}
私は、彼らが同じように動作するように期待されるラインObjectFactory.GetInstance(modelType);
を取り出したが、TryGetInstance
戻りヌルとGetInstance
それがで間違いなくあるように、正しいオブジェクトのOKを返します。レジストリ。私はGetInstance
を使うことができますが、もう少しエレガントですtryキャッチでそれをラップする必要があります!何か提案してください?
このコメントは、私にとって非常に謎を解きました。ありがとう! –