使用 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();

使用 AutoFac 在 MVC4 中注册帮助程序

在某处,您还需要注册一个IPTDistrictService以便 Autofac 可以填充帮助程序构造函数。

我不知道您是否真的想更新一个帮助程序,或者这只是例如,但是您发布的帮助程序类没有无参数构造函数,因此最后一个代码片段无法编译。

控制器应将帮助程序类作为构造函数参数,并让 Autofac 完成工作。