2014-06-26 155 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())',但是*可能*工作取决于项目。 –

相关问题