遇到一个我不知道表示层如何使用服务层的问题。
我总共有三层:数据层,服务层和表示层。
在数据层中,我使用了Ado.net并创建了存储库。
在服务层中,我创建了Dto实体。
当我从Controller呼叫服务时遇到问题。
错误是:
没有为此对象定义无参数构造函数。 说明:执行当前Web请求时出现未处理的异常。查看堆栈跟踪以查看有关此错误的更多信息,并确定导致代码错误的位置。 异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。
源错误:
运行当前Web请求时生成了未处理的异常。可以使用异常堆栈查看有关异常的来源和位置的信息。
下面是我的代码:
using AutoMapper;
using OA.Models;
using OA.Service;
using OA.Service.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace OA.Controllers
{
public class HomeController : Controller
{
private readonly IUserService userService;
private readonly IUserProfileService userProfileService;
public HomeController(IUserService userService, IUserProfileService userProfileService)
{
this.userService = userService;
this.userProfileService = userProfileService;
}
// GET: Home
[HttpGet]
public ActionResult Index()
{
List<UserViewModel> model = new List<UserViewModel>();
userService.GetUsers().ToList().ForEach(u =>
{
UserProfileDto userProfileDto = userProfileService.GetUserProfile(u.Id);
UserViewModel user = new UserViewModel
{
Id = u.Id,
Name = $"{userProfileDto.FirstName} {userProfileDto.LastName}",
Email = u.Email,
Address = userProfileDto.Address
};
model.Add(user);
});
return View(model);
}
}
}
有人知道这是什么问题吗?还是我误会了如何使用N层架构?谢谢
答案 0 :(得分:0)
您必须在IOC中注册HomeController
。
以Unity为例:
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterType<Controllers.HomeController>(new InjectionConstructor());
}