2014-06-26 4 views
0

Je suis bloqué sur ce problème. J'ai deux contrôleurs, UtilisateursController et HomeController Je suis en train d'appeler une méthode de commande à partir UsersController d'un autre contrôleur (HomeController) en faisant ceci:ASP.NET MVC 4 appeler une méthode de contrôleur à partir d'un autre contrôleur

UsersController usersController = new UsersController(); 

mais je reçois cette erreur: Générer stub constructeur dans « CTHRC.Roti. Web.UI.Controllers.UsersController '

Je ne comprends pas cette erreur.

Voici mon 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); 
     } 
    } 
} 

Voici mon 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(); 

     } 

    } 
} 

Que dois-je faire pour résoudre ce problème? Toute aide serait appréciée. Merci. La raison pour laquelle j'essaye de faire ceci est parce que je veux les données de la méthode de contrôleur.

+0

Pourquoi avez-vous besoin d'instancier UserController? Vous pouvez utiliser 'RedirectToAction (" ActionName "," ControllerName ")' si vous essayez d'y envoyer l'utilisateur. –

+1

Si vous appelez une méthode d'un contrôleur à un autre, je pense que vous devriez repenser votre conception. Les contrôleurs ont beaucoup de frais généraux et de travail, et il n'est pas nécessaire de reproduire cela. Retirez le code commun que vous souhaitez utiliser par les deux contrôleurs et déplacez-le dans une zone commune, telle qu'une classe d'assistance. –

+0

En outre, votre code n'utilise même pas le contrôleur que vous lancez. Votre exemple est incomplet? –

Répondre

0

Votre UsersController n'a pas de constructeur sans paramètre, ce qui est attendu par le site d'appel.

Vous pouvez ajouter un comme ceci:

public UsersController() { 
} 

Sinon, vous devez fournir un UsersService comme paramètre sur le site d'appel.

+0

Les contrôleurs peuvent avoir des paramètres dans les constructeurs. C'est une pratique standard lors de l'utilisation de l'IoC. http://www.mikesdotnetting.com/Article/117/Dependency-Injection-and-Inversion-of-Control-with-ASP.NET-MVC –

+0

lorsque je fais cela 'UsersController userController = new UsersController (UserService userService)' I obtenir deux nouvelles erreurs 'UsersService est un type mais est utilisé comme une variable' et ') attendu pour userService – user3723240

+0

Soyez prudent, c'est une compréhension très basique de l'IoC. N'avez-vous pas un autre développeur avec le plus knowlodge du code? vous * pouvez * faire 'UsersController userController = new UsersController (nouveau UsersService())' mais cela * pourrait * fonctionner cela dépend beaucoup du projet. –

Questions connexes