0
私のアカウントコントローラでは、nhibernateのセッションを取得しようとしていますが、私のコントローラファクトリクラスStructureMapControllerFactoryのCreateContollerメソッドで "コントローラがパラメータなし公共のコンストラクタ。 "それ以外のコントローラでは正常に動作しますがGlobal.asaxファイルからAccountControllerは流暢なnhibernateとStructureMapで動作しないようです
public class StructureMapControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext, string controllerName)
{
try
{
var controllerType = base.GetControllerType(requestContext, controllerName);
return ObjectFactory.GetInstance(controllerType) as IController;
}
catch (Exception)
{
//Use the default logic
return base.CreateController(requestContext, controllerName);
}
}
}
とコードスニペット:以下
は私のStructureMapControllerFactoryクラスですprotected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new SmartHRMS.Utility.StructureMapControllerFactory());
StructureMap.ObjectFactory.Initialize(x =>
{
x.For<NHibernate.ISessionFactory>()
.Singleton()
.Use(SmartHRMS.Utility.SessionHelper.GetSessionFactory());
x.For<NHibernate.ISession>()
.HttpContextScoped()
.Use(context => context.GetInstance<NHibernate.ISessionFactory>().OpenSession());
});
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
protected void Application_EndRequest()
{
StructureMap.ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
例外:私にヒントを与えたmookid8000へ
{"An error occurred when trying to create a controller of type 'HCM.Controllers.AccountController'. Make sure that the controller has a parameterless public constructor."}
あなたが投稿例外メッセージがあなたのコントローラをインスタンス化しようとしているDefaultControllerFactory' 'からである。このようなax.cs。本当の問題が何であるかを見るために、StructureMapへの呼び出しの回りで 'try-catch'を試してみてください。 – mookid8000
はい、私はそれを解決した方法を示す答えを投稿しました。 – Waqas