C# 如何在解决方案中查找所有AutoMap配置文件并进行注册

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 {

我正在使用net core 3.1和AutoMapper 10.1.1

我在auto mapera解决方案中的不同项目上进行了详细介绍

如何获得解决方案中所有配置文件的列表并注册它们,而不是引用每个项目?

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,我添加了一个示例。