C# 如何在解决方案中查找所有AutoMap配置文件并进行注册
我正在使用net core 3.1和AutoMapper 10.1.1 我在auto mapera解决方案中的不同项目上进行了详细介绍 如何获得解决方案中所有配置文件的列表并注册它们,而不是引用每个项目?C# 如何在解决方案中查找所有AutoMap配置文件并进行注册,c#,asp.net-mvc,asp.net-core,automapper,C#,Asp.net Mvc,Asp.net Core,Automapper,我正在使用net core 3.1和AutoMapper 10.1.1 我在auto mapera解决方案中的不同项目上进行了详细介绍 如何获得解决方案中所有配置文件的列表并注册它们,而不是引用每个项目? namespace Boilerplate.WepApp.Automap { public class WebAppAutoMap : Profile { } } 还有一个自动映射器配置代码 namespace Boilerplate.WepApp.Automap {
namespace Boilerplate.WepApp.Automap
{
public class WebAppAutoMap : Profile
{
}
}
还有一个自动映射器配置代码
namespace Boilerplate.WepApp.Automap
{
public static class AutoMapperExtensions
{
public static void AddAutoMapper(this IServiceCollection services)
{
var mapper = new MapperConfiguration(mc =>
{
mc.AddProfile(new WebAppAutoMap());
mc.AddProfile(new BlogsAutoMap());
}).CreateMapper();
services.AddSingleton(mapper);
}
}
}
如何获取解决方案中所有配置文件的列表并进行注册?
namespace Boilerplate.WepApp.Automap
{
public class WebAppAutoMap : Profile
{
}
}
为了不违反整个项目的体系结构,这是必需的。AutoMapper有一些扩展来扫描AutoMapper类,并向服务集合注册配置、映射和扩展 您只需在其中一个扩展上交付图层部件:
公共静态类ServiceCollectionExtensions
{
公共静态IServiceCollection AddAutoMapper(此IServiceCollection服务,操作configAction)
=>AddAutoMapperClasses(服务,(sp,cfg)=>configAction?.Invoke(cfg),null);
公共静态IServiceCollection AddAutoMapper(此IServiceCollection服务,参数程序集[]程序集)
=>AddAutoMapperClasses(服务、null、程序集);
公共静态IServiceCollection AddAutoMapper(此IServiceCollection服务、操作configAction、参数程序集[]程序集)
=>AddAutoMapperClasses(服务,(sp,cfg)=>configAction?.Invoke(cfg),程序集);
...
}
然后,AutoMapper将解决此问题:
专用静态IServiceCollection AddAutoMapperClasses(IServiceCollection服务,操作configAction,
IEnumerable assembliesToScan,ServiceLifetime ServiceLifetime=ServiceLifetime.Transient)
{
...
var assembliesToScanArray=assembliesToScan as Assembly[]??assembliesToScan?.ToArray();
...
}
DI的扩展方法示例
公共静态类配置服务
{
公共静态IServiceCollection AddAutoMapper(此IServiceCollection服务)
=>services.AddAutoMapper(
AppDomain.CurrentDomain.GetAssemblys()
.Where(x=>x.FullName)?
.包含(“样板文件”)??错误);
}
或者更具活力
公共静态类配置服务
{
公共静态IServiceCollection AddAutoMapper(此IServiceCollection服务)
=>services.AddAutoMapper(
AppDomain.CurrentDomain.GetAssemblys()
.Where(x=>x.FullName)?
.Contains(GetAssemblySuffix())??false);
私有静态字符串GetAssemblySuffix()
=>Assembly.GetEntryAssembly()?.FullName?子字符串(0,11);
}
启动时使用
public void配置服务(IServiceCollection服务)
{
...
services.AddAutoMapper();
...
}
尝试使用reflection@WaqasRaja我没能通过思考得到他们。。请帮助答案中删除的示例此处的用法很重要,而不是实现:)我无法实现。我需要有关查找所有配置文件的实现的帮助…@Nikita,我添加了一个示例。