最近、StructureMapを使用して依存性注入を実装しようとしました。私はすべての方法で例を追跡することができたが、私はアプリケーションを実行しようとするたびに例外が発生している。私のコントローラ工場のコードスニペットをいくつか紹介します。カスタムコントローラファクトリ、ASP.NET MVCの依存関係注入/構造マップの問題
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
throw new ArgumentNullException("controllerType");
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
私のGlobal.asaxのは、私のすべての依存関係を登録し、静的ブートストラップクラスを呼び出しますが、StructureMapControllerFactoryのGetControllerInstanceが二回呼ばなっているように見えます。最初に呼び出されたときは、適切なcontrollerTypeが渡されますが、2回目の呼び出しでは常にnullになります。
初めてGetControllerInstanceが呼び出されると、タイプは正しいHomeControllerに設定されます。コードHomeControllerで発生し、View()を返します。 View()の戻り時に、Page_Loadイベントはaspxファイルに対して呼び出されます。それを踏んで、それは次の行に到着します:
httpHandler.ProcessRequest(HttpContext.Current);
これは、GetControllerInstanceが2回目に呼び出される場所です。
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
Bootstrapper.ConfigureStructureMap();
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
私は依存性注入の作業を取得するために非常に熱心だと誰もが私を助けることができれば、最も感謝し、次のようになります。
は、ここで関連するかもしれない私のGlobal.asaxのビットです。 :)
私はまったく同じ問題を抱えています。 – Micah
あなたはどのようにコントローラを登録しますか? – Sebastian
良い問題の説明。 –