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
而不像那样实例化它?
答案 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等各种各样的东西。