這是我的情況: 我有一個非常簡單的MVC4應用程序。一種觀點,一名管制員,責任有限。它的功能是作爲一個供應商的應用程序的登錄頁面,並負責:ASP.Net MVC4使用Ninject,HttpPost返回'無參數構造函數'
- 讀取用戶
- 從供應商應用程序的數據庫讀取用戶的成員資格的ActiveDirectory性能
- 如果會員用戶不不存在的,通過添加用戶確認會員條目,然後重定向到供應商的應用程序
- 如果會員不存在,顯示的鏈接,允許用戶通過點擊向供應商申請
我遇到了#3的問題,但只是因爲我已經將Ninject添加到項目中(需要依賴注入來允許單元測試寫入)。從那以後,我爲HTTP Post控制器動作獲取了「爲該對象定義的無參數構造函數」,並且只有後。 GET在這個控制器上工作得很好。這個控制器只有一個構造函數,並且它成功調用GET或POST - 添加一個斷點,我可以逐步調用構造函數,並且只有在傳遞最後一個大括號之後,纔會獲得「無參數構造函數」錯誤。
我試過的解決方案在這些StackOverflow的答案: https://stackoverflow.com/a/14027722/1139007
https://stackoverflow.com/a/17909609/1139007
https://stackoverflow.com/a/21010851/1139007
我已確保我的所有綁定都在NinjectWebCommon.cs(他們是)正確設置。我已驗證(根據this answer)Web.Config具有正確的配置。我已經卸載並重新安裝Ninject.MVC3(和所有依賴項)。我正在拉我的頭髮。
這裏的默認構造:
public HomeController(IAlerts alertRepository, IStore storeRepository, IMemberRecord memberRepository, IHTTPUserRequest userRequest, IActiveDirectory ad)
{
_alertRepository = alertRepository;
_storeRepository = storeRepository;
_memberRepository = memberRepository;
_userRequest = userRequest;
_ad = ad;
}
這裏的HttpPost控制器動作:
[HttpPost]
public HttpStatusCodeResult InsertMember(AVMemberRecord profile)
{
bool validStore = _storeRepository.isValidStore(profile.defaultStoreBU);
if (validStore)
{
bool success = _memberRepository.insertMemberRecord(profile);
if (success)
{
return new HttpStatusCodeResult(200);
}
else
{
return new HttpStatusCodeResult(500, "Error inserting Member record. Please open a ticket to request access.");
}
}
else
{
return new HttpStatusCodeResult(500, "Invalid store association for user. Please open a ticket to request access.");
}
}
儲存庫分別具有接受IDataAccess的實例作爲一個參數的構造函數:
public StoreRepository(IDataAccess db)
{
_db = db;
stores = db.getStores();
}
綁定到IDataAccess的DataAccess類只有一個參數的構造函數,並利用web.config文件中有關其連接字符串:
public DataAccess()
{
this.connectionString = ConfigurationManager.ConnectionStrings["DEV_ConnectionString"].ToString();
}
在NinjectWebCommon.cs的綁定:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IDataAccess>().To<DataAccess>();
kernel.Bind<IActiveDirectory>().To<ActiveDirectory>();
kernel.Bind<IStore>().To<StoreRepository>();
kernel.Bind<IMemberRecord>().To<MemberRepository>();
kernel.Bind<IAlerts>().To<AlertRepository>();
kernel.Bind<IHTTPUserRequest>().To<HTTPUserRequest>();
}
任何建議或指導,以什麼我應該尋找在這裏?如果這種情況持續太久,我可能會重構整個項目來摧毀Ninject(不幸的是,會丟失許多單元測試)。
編輯:完整的錯誤被要求在評論中,所以我會在這裏包括。
[MissingMethodException: No parameterless constructor defined for this object.] System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +113 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232 System.Activator.CreateInstance(Type type, Boolean nonPublic) +83 System.Activator.CreateInstance(Type type) +66 System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +183 System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +564 System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +416 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +317 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +117 System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +446 System.Web.Mvc.Async.WrappedAsyncResult1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30 System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +381 System.Web.Mvc.Async.WrappedAsyncResult1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71 System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +249 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +49 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
可以請你發佈整個異常:消息,堆棧跟蹤(包括內部異常,如果有的話)。 – BatteryBackupUnit