c# - 如何将 Automapper 与 Autofac 一起使用

标签 c# asp.net-web-api asp.net-web-api2 automapper autofac

我已升级到最新版本的 AutoMapper (9.0),并将静态配置更改为:

public static IMapper RegisterAutoMapper()
{
    var config = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<MyModel MyDto>;
        //etc...
   });
  
   var mapper = config.CreateMapper();
   return mapper;
}
使用以前的静态 API 我曾经在 Global.asax 中执行以下操作:
protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
    AutoMapping.Map();
}
WebApiConfig.Register注册路线和Autofac如何使用 Autofac 注册 AutoMapper,因为目前我在这些行上遇到编译器错误:
var myDto = Mapper.Map<MyModel>(model);
和编译器错误:

An object reference is required for the non-static field, method, or property 'Mapper.Map(object)'

最佳答案

这是我之前做的一个:

public class YourAutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        //Also register any custom type converter/value resolvers
        builder.RegisterType<CustomValueResolver>().AsSelf();
        builder.RegisterType<CustomTypeConverter>().AsSelf();

        builder.Register(context => new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<MyModel MyDto>;
            //etc...
        })).AsSelf().SingleInstance();

        builder.Register(c =>
        {
            //This resolves a new context that can be used later.
            var context = c.Resolve<IComponentContext>();
            var config = context.Resolve<MapperConfiguration>();
            return config.CreateMapper(context.Resolve);
        })
        .As<IMapper>()
        .InstancePerLifetimeScope();
    }
}

在 global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        var builder = new ContainerBuilder();

        builder.RegisterModule<MyAutofacModule>();
        // Register anything else needed

        var container = builder.Build();

        // MVC resolver
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

        // API Resolver
        GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
}

然后你需要做的就是注入(inject)IMapper

关于c# - 如何将 Automapper 与 Autofac 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519739/

相关文章:

c# - 使用 JsonProperty 将 JSON 绑定(bind)到模型属性

C# + Sql Server - 多次执行存储过程。最好的办法?

jquery.post() 从 MVC 4 WebAPI 返回 200 OK,但错误处理程序被命中

c# - 在 C# 中使用变量等待和线程安全

javascript - ASP.NET WebApi DateTimeOffset 序列化为 Json/JavaScript (angular2)

asp.net-web-api - 是否可以在本地观看应用程序洞察

c# - 在单元测试中创建多部分/混合表单请求

c# - 在 C# 中打开 CHM(帮助文件)

c# - O365 通过 ASP.NET MVC 中的 PowerShell 3 : MicrosoftOnlineException was thrown

c# - 每次在进程中调用 XmlConfigurator.Configure() 时,log4net 如何不清除日志