ASP C#接口

ASP C#接口,c#,asp.net-mvc,dependency-injection,interface,static-class,C#,Asp.net Mvc,Dependency Injection,Interface,Static Class,我正在使用ASP.NETMVC5项目。我是商业编程新手,对交互有点困惑,我以前从未使用过它们。我有一个几乎完成的项目 以下是一个例子: public interface IUserService() { bool ValidateUser(string name, string password); //.. others } 我也有一个类来实现这个服务 public class UserService : IUserService { public bool Validat

我正在使用ASP.NETMVC5项目。我是商业编程新手,对交互有点困惑,我以前从未使用过它们。我有一个几乎完成的项目

以下是一个例子:

public interface IUserService()
{
   bool ValidateUser(string name, string password);
   //.. others
}
我也有一个类来实现这个服务

public class UserService : IUserService
{
   public bool ValidateUser(string name, string password)
   {
     //code
   }
   //.. others
}
我正在使用UserService,如果我的控制器为示例:

public class HomeController : Controller
{
   IUserService _userService;

   public HomeController(IUserService userService)
   {
     _userService = userService;
   }

   [HttpGet]
   JsonResult Anymethod(string name, string pw)
   {
     return Json(_userService.ValidateUser(name,pw), JsonRequestBeh.AllowGet);
  }
} 
为什么在没有实现IUserService的情况下不将UserService用作静态类而不是IUserService

public static UserService
{
   ValidateUser(string user, string pw)
   {
     //code
   }
}
如果在这种情况下使用类似的接口有什么好处?

因为


post可能对您有用。

想法是不要在控制器中依赖于服务的实际实现。若您是通过接口注入服务,那个么您是在控制器外部控制实现。其基本原理是使控制器的测试更容易。您可以在测试控制器逻辑时注入模拟服务。检查依赖项注入模式。

在这种情况下,接口的使用遵循依赖项注入设计模式。当你想用mock进行单元测试时,这个模式非常有用。我猜如果你不熟悉接口,你还没有做过很多单元测试。两个建议:开始进行单元测试,然后观察。