我创建了一个asp.net Web api项目,并分别在AccountController
中实现了以下HTTP GET方法,并在AccountService
和AccountRepository
中实现了相关的服务方法和存储库方法。
// WEB API
public class AccountController : ApiController
{
private readonly IAccountService _accountService;
public AccountController(IAccountService accountService)
{
_accountService = accountService;
}
[HttpGet, ActionName("UserProfile")]
public JsonResult<decimal> GetUserSalary(int userID)
{
var account = _accountService.GetUserSalary(userID);
if (account != null)
{
return Json(account.Salary);
}
return Json(0);
}
}
服务/业务层
public interface IAccountService
{
decimal GetUserSalary(int userId);
}
public class AccountService : IAccountService
{
readonly IAccountRepository _accountRepository = new AccountRepository();
public decimal GetUserSalary(int userId)
{
return _accountRepository.GetUserSalary(userId);
}
}
存储库/数据访问层
public interface IAccountRepository
{
decimal GetUserSalary(int userId);
}
public class AccountRepository : IAccountRepository
{
public decimal GetUserSalary(int userId)
{
using (var db = new AccountEntities())
{
var account = (from b in db.UserAccounts where b.UserID == userId select b).FirstOrDefault();
if (account != null)
{
return account.Salary;
}
}
return 0;
}
}
UnityConfig
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IAccountService, AccountService>();
container.RegisterType<IAccountRepository, AccountRepository>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
但是当我调用API方法GetUserSalary()
时,我得到一个错误提示
尝试创建“ AccountController”类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。
答案 0 :(得分:2)
确认您没有忘记注册Unity IoC容器本身:
UnityConfig.RegisterComponents()
方法的Global.asax或Startap.cs(Owin)。答案 1 :(得分:-1)
您当前的构造函数具有参数(或者您可以使用args)。
请参阅:
public AccountController(IAccountService accountService)
{
_accountService = accountService;
}
您需要做的就是在控制器中添加一个“无参数构造函数”。
public AccountController()
{
}
无参数的构造函数通常在具有参数的构造函数之上,尽管据我所知,这仅是由于标准,而不是它可能引起的任何实际影响。
还有一个与此类似的已经存在的问题/问题,我将在下面链接,可能会提供更多详细信息。
Make sure that the controller has a parameterless public constructor error