使用 AutoFac 在 MVC4 中注册帮助程序
本文关键字:注册 帮助程序 MVC4 AutoFac 使用 | 更新日期: 2023-09-27 17:56:47
我需要避免参数来创建帮助程序,所以我使用 AutoFac,但我无法做到这一点:
public class PTDistrictHelpers
{
private readonly IPTDistrictService _ptDistrictService;
public PTDistrictHelpers(IPTDistrictService ptDistrictService)
{
_ptDistrictService = ptDistrictService;
}
public IEnumerable<SelectListItem> DropDownList(int selectedValue = GlobalConstants.DROPDOWNLIST_NO_SELECTED_VALUE)
{
var ptDistrictsDto = _ptDistrictService.ListAll();
var ptDistrictsViewModel = Mapper.Map<IList<PTDistrictDto>, IList<PTDistrictViewModel>>(ptDistrictsDto);
var ptDistrictsList = ptDistrictsViewModel.Select(district =>
new SelectListItem
{
Value = district.Id.ToString(),
Text = district.Name,
Selected = (district.Id == selectedValue)
});
return ptDistrictsList;
}
}
在AutoFac配置中,我有:
public class AutofacConfig
{
public static void RegisterDependencies()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// PTDistrict Helpers
builder.RegisterType<PTDistrictHelpers>()
.As<PTDistrictHelpers>()
.InstancePerHttpRequest();
// PTDistrict Interface registration
builder.RegisterType<PTDistrictService>()
.As<IPTDistrictService>()
.InstancePerHttpRequest();
}
}
在控制器中,当我尝试创建新的 PTDistrictHelpers 时,我收到错误"不包含采用 0 参数的构造函数"。
var ptDistrictList = new PTDistrictHelpers().DropDownList();
在某处,您还需要注册一个IPTDistrictService
以便 Autofac 可以填充帮助程序构造函数。
我不知道您是否真的想更新一个帮助程序,或者这只是例如,但是您发布的帮助程序类没有无参数构造函数,因此最后一个代码片段无法编译。
控制器应将帮助程序类作为构造函数参数,并让 Autofac 完成工作。