【问题标题】:Inject automapper with Autofac in each Controller class在每个 Controller 类中使用 Autofac 注入 automapper
【发布时间】:2016-03-21 05:15:35
【问题描述】:

我想将自动映射器注入应用程序的其他层。我已经阅读了其他帖子和文章,但我无法弄清楚如何应用它们。我是自动映射和 IoC 的新手。这是我现在尝试过的。我可以更改什么以便将自动映射器注入控制器和其他层?

public class AutomapperConfig
{
    public MapperConfiguration Config { get; set; }
    public void Initialize()
    {
        Config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<CustomerViewModel, CustomerBusinessModel>().ReverseMap();
            ...
        }
}

public static IContainer BuildContainer()
{
    var builder = new ContainerBuilder();
    builder.RegisterControllers(typeof(MvcApplication).Assembly);
    ....
    return builder.Build();
}

public class MvcApplication : System.Web.HttpApplication
{
    public IContainer _container;
    protected void Application_Start()
    {  ...
       _container = AutofacConfig.BuildContainer();
       DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
    }
}

public class CustomersController : Controller
{
    private readonly IBusinessLogic<CustomerBusinessModel> _customerBl;
    private readonly IMapper mapper;

    public CustomersController (IBusinessLogic<CustomerBusinessModel> customer, AutomapperConfig automapper)
    {
        _customerBl= customer;
        mapper = automapper.Config.CreateMapper();
    }
    ...
}

【问题讨论】:

    标签: asp.net dependency-injection inversion-of-control automapper autofac


    【解决方案1】:

    试试这个

    builder.Register(c => new MapperConfiguration(cfg =>
         {
            cfg.CreateMap<CustomerViewModel, CustomerBusinessModel>().ReverseMap();
            ...
         })
         .AsImplementedInterfaces().SingleInstance();
    
    builder.Register(c => c.Resolve<IConfigurationProvider>().CreateMapper())
        .As<IMapper>();
    

    CustomerController.cs

    public class CustomersController : Controller
    {
        private readonly IBusinessLogic<CustomerBusinessModel> _customerBl;
        private readonly IMapper _mapper;
    
        public CustomersController (IBusinessLogic<CustomerBusinessModel> customer, IMapper mapper)
        {
            _customerBl= customer;
            _mapper = mapper;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多