2014-06-26 185 views
0

我被困在這個問題上。我有兩個控制器,UsersController和HomeController中我試圖做這從另一個控制器(HomeController中)調用從UsersController控制器方法:ASP.NET MVC 4從另一個控制器調用控制器方法

UsersController usersController = new UsersController(); 

,但我得到這個錯誤:產生「CTHRC.Roti構造函數存根。 Web.UI.Controllers.UsersController'

我不明白這個錯誤。

這裏是我的UsersController:

using System; 
using System.IO; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Web; 
using System.Web.Http; 
using CTHRC.Roti.Domain.Api.Services; 
using CTHRC.Roti.Domain.Model; 

namespace CTHRC.Roti.Web.UI.Controllers 
{ 
    public class UsersController : ApiController 
    { 
     protected readonly UsersService UsersService; 

     public UsersController(UsersService usersService) 
     { 
      UsersService = usersService; 
     } 

     [HttpGet] 
     public dynamic Get(int UserId) 
     { 
      return UsersService.Get(UserId); 
     } 
    } 
} 

這裏是我的HomeController:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using WebMatrix.WebData; 

namespace CTHRC.Roti.Web.UI.Controllers 
{ 
    public class HomeController : Controller 
    { 
     // 
     // GET: /Default/ 

     public ActionResult Index() 
     { 
      if (!WebSecurity.IsAuthenticated) 
      { 
       Response.Redirect("~/account/login"); 
      } 
      UsersController userController = new UsersController(); 
      return View(); 

     } 

    } 
} 

我有什麼做的,解決這一問題?任何幫助,將不勝感激。謝謝。我試圖這樣做的原因是因爲我想要控制器方法中的數據。

+0

爲什麼你需要實例化UserController?如果您嘗試在此處發送用戶,則可以使用'RedirectToAction(「ActionName」,「ControllerName」)'。 –

+1

如果你正在從一個控制器調用另一個控制器的方法,我認爲你應該重新考慮你的設計。控制器有很多開銷和設置工作,並且沒有必要重複它。拉出兩個控制器要使用的通用代碼,並將其移入公共區域,例如助手類。 –

+0

此外,您的代碼甚至不使用您正在啓動的控制器。你的例子不完整嗎? –

回答

0

您的UsersController沒有無參數構造函數,這是調用站點預期的。

您可以添加一個這樣的:

public UsersController() { 
} 

否則,您必須提供UsersService作爲在調用位置參數。

+0

控制器可以在構造函數中有參數。這是使用IoC時的標準做法。 http://www.mikesdotnetting.com/Article/117/Dependency-Injection-and-Inversion-of-Control-with-ASP.NET-MVC –

+0

當我這樣做'UsersController userController = new UsersController(UsersService userService)'我得到兩個新的錯誤'UsersService是一個類型,但使用像一個變量'和')預期'爲用戶服務 – user3723240

+0

要小心,這是對IoC的非常基本的瞭解。你有沒有其他的開發人員最瞭解代碼?你*可以*執行'UsersController userController = new UsersController(new UsersService())',但是*可能*工作取決於項目。 –

相關問題