如何跨 Visual Studio 个项目初始化自动映射器
how to initialize automapper accross Visual Studio Projects
我在 Visual Studio ASP.NET MVC 应用程序的多个 dll 项目中使用 automapper。我在主 WebUI 项目的 Application_Start() 方法中调用的每个项目中都创建了一个 AutoMapperConfiguration class。
问题是我正在尝试以相同的方式为我的 Visual Studio 解决方案的每个单独项目初始化自动映射器,但我收到一条错误消息,说自动映射器只能初始化一次...
如果我只为一个 ddl 项目而不是为多个 dll 项目执行初始化 automapper 的方式,我还会收到一条警告,在 8.1.1 版的 automapper 中说 Mapper.Initialize 方法被折旧。在版本 9.0.0 中,初始化方法不再存在...
我怎样才能做到这一点?
感谢您的帮助,
E.
我在每个dll项目中都有这段代码:
public class AutoMapperConfiguration
{
public static void ConfigureAutoMapper()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<BusinessToDomainProfile>();
cfg.AddProfile<DomainToBusinessProfile>();
});
}
}
我在 Global.asax Appplication_Start 方法中将它称为我的主要 WebUI 项目:
Domain.Mappers.AutoMapperConfiguration.ConfigureAutoMapper();
Business.Mappers.AutoMapperConfiguration.ConfigureAutoMapper();
您只能初始化映射器一次。通常你在 'Set as StartUp Project' 中初始化,所以在你的情况下,收集所有这些 cfg.AddProfile() 并将它们放入你的 global.asax.cs Application_Start Initialize() 调用中。
我正在使用 Global.asax.cs Application_Start() 方法开发较旧的应用程序,该方法从一系列项目中配置 AutoMapper 配置文件,如下所示:
Mapper.AddProfile<AutoMapperConfigurationApi>();
Mapper.AddProfile<AutoMapperConfiguration>();
Mapper.AddProfile<AutoMapperWebConfiguration>();
每个配置文件,例如AutoMapperConfigurationApi 是另一个项目中的独立配置 class:
namespace API_MVC
{
public class AutoMapperConfigurationApi : Profile
{
protected override void Configure()
{
CreateMap<EnquiryCreateRequest, EnquiryDto>();
}
}
}
我还有一个才几个月大的 .Net Core 3 应用程序,我正在使用:
在我的 Startup.cs MVC 项目中:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAutoMapper(new Assembly[] {
typeof(SomeProject.AutoMapperProfile).Assembly,
typeof(SomeOtherProject.AutoMapperProfile).Assembly
});
...
}
AutoMapperProfile.cs 个文件设置如下:
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<MyModel, MyModelDto>();
}
}
我在控制器中为 Mapper 使用依赖注入,例如:
public MyController
{
public MyController(IMapper mapper)
{
}
}
将您的配置文件 classes 放入您的不同项目中,并在您的 ASP.NET MVC 项目中初始化一次 AutoMapper。
// Load all profiles in an assembly by specifying a type from the assembly
Mapper.Initialize(cfg => {
cfg.AddProfiles(typeof(Student), typeof(Course));
});
不要在任何 class 库项目 (dll) 中调用 Mapper.Initialize。可执行文件(Web 应用程序、控制台应用程序等)负责初始化。
我在 Visual Studio ASP.NET MVC 应用程序的多个 dll 项目中使用 automapper。我在主 WebUI 项目的 Application_Start() 方法中调用的每个项目中都创建了一个 AutoMapperConfiguration class。
问题是我正在尝试以相同的方式为我的 Visual Studio 解决方案的每个单独项目初始化自动映射器,但我收到一条错误消息,说自动映射器只能初始化一次...
如果我只为一个 ddl 项目而不是为多个 dll 项目执行初始化 automapper 的方式,我还会收到一条警告,在 8.1.1 版的 automapper 中说 Mapper.Initialize 方法被折旧。在版本 9.0.0 中,初始化方法不再存在...
我怎样才能做到这一点?
感谢您的帮助,
E.
我在每个dll项目中都有这段代码:
public class AutoMapperConfiguration
{
public static void ConfigureAutoMapper()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<BusinessToDomainProfile>();
cfg.AddProfile<DomainToBusinessProfile>();
});
}
}
我在 Global.asax Appplication_Start 方法中将它称为我的主要 WebUI 项目:
Domain.Mappers.AutoMapperConfiguration.ConfigureAutoMapper();
Business.Mappers.AutoMapperConfiguration.ConfigureAutoMapper();
您只能初始化映射器一次。通常你在 'Set as StartUp Project' 中初始化,所以在你的情况下,收集所有这些 cfg.AddProfile() 并将它们放入你的 global.asax.cs Application_Start Initialize() 调用中。
我正在使用 Global.asax.cs Application_Start() 方法开发较旧的应用程序,该方法从一系列项目中配置 AutoMapper 配置文件,如下所示:
Mapper.AddProfile<AutoMapperConfigurationApi>();
Mapper.AddProfile<AutoMapperConfiguration>();
Mapper.AddProfile<AutoMapperWebConfiguration>();
每个配置文件,例如AutoMapperConfigurationApi 是另一个项目中的独立配置 class:
namespace API_MVC
{
public class AutoMapperConfigurationApi : Profile
{
protected override void Configure()
{
CreateMap<EnquiryCreateRequest, EnquiryDto>();
}
}
}
我还有一个才几个月大的 .Net Core 3 应用程序,我正在使用:
在我的 Startup.cs MVC 项目中:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAutoMapper(new Assembly[] {
typeof(SomeProject.AutoMapperProfile).Assembly,
typeof(SomeOtherProject.AutoMapperProfile).Assembly
});
...
}
AutoMapperProfile.cs 个文件设置如下:
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<MyModel, MyModelDto>();
}
}
我在控制器中为 Mapper 使用依赖注入,例如:
public MyController
{
public MyController(IMapper mapper)
{
}
}
将您的配置文件 classes 放入您的不同项目中,并在您的 ASP.NET MVC 项目中初始化一次 AutoMapper。
// Load all profiles in an assembly by specifying a type from the assembly
Mapper.Initialize(cfg => {
cfg.AddProfiles(typeof(Student), typeof(Course));
});
不要在任何 class 库项目 (dll) 中调用 Mapper.Initialize。可执行文件(Web 应用程序、控制台应用程序等)负责初始化。