需要帮助解释ajax发布错误

时间:2014-03-01 20:01:22

标签: c# ajax asp.net-mvc dependency-injection

private readonly UserService userService;

    public AccountController(UserService userService)
    {
        this.userService = userService;
    }

    [HttpPost]
    public ActionResult Login(string username, string password)
    {
        bool validUser = this.userService.ValidateUser(username, password);
       // bool validUser = UserService.ValidateUser(username, password);
        if (validUser)
        {
            FormsAuthentication.SetAuthCookie(username, true);
            return Json(new
                {
                    valid = true,
                    action = "Views/Home/Index"
                });
        }
        else
        {
            return Json(new
                {
                    valid = false,
                    action = "Views/Account/_LoginPartial"
                });
        }
    }

由于以下原因,我的ajax帖子无法访问方法Login

 private readonly UserService userService;

    public AccountController(UserService userService)
    {
        this.userService = userService;
    }

如果删除此代码,则可以正常使用。但为什么? 如何在我的Login方法中使用userService而不像那样实例化它?

2 个答案:

答案 0 :(得分:1)

  

我的ajax帖子无法通过以下方式访问Login方法:

private readonly UserService userService;

public AccountController(UserService userService)
{
    this.userService = userService;
}

当然!您可能会错过并需要工厂为您创建此Controller所需的UserService(我想知道为什么不使用interface),否则,这个{{ 1}}将不会被实例化,因此Controller动作将被调用。

这是一个DI Construction Injection,如果你的应用程序中有一个配置良好的控制器工厂,它将自动出现。

以下是您可以使用的简单自定义控制器工厂:

Login

请勿忘记注册:

public class CustomControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
    {
        UserService userService = new UserService();
        IController controller = Activator.CreateInstance(controllerType, new[] { userService }) as Controller;
        return controller;
    }
} 

阅读这篇文章:ASP.NET MVC Controller Dependency Injection for Beginners

答案 1 :(得分:1)

这个控制器看起来像是用于依赖注入工具。

如果你有一个,那么你的依赖解析器可能没有正确配置。如果你没有一个,那么可以使用nuget安装ninject,unity,simple injector等各种各样的东西。