gpt4 book ai didi

.net - 如何在 AutoMapper 中扫描和自动配置配置文件?

转载 作者:行者123 更新时间:2023-12-03 11:32:23 26 4
gpt4 key购买 nike

有没有办法自动配置 Automapper 来扫描命名空间/程序集中的所有配置文件?我想做的是将映射配置文件从给定接口(interface)过滤的给定程序集中添加到 AutoMapper,例如 StructureMap 中的扫描约定:

    public static void Configure()
{
ObjectFactory.Initialize(x =>
{
// Scan Assembly
x.Scan(
scanner =>
{
scanner.TheCallingAssembly();
scanner.Convention<MyCustomConvention>();
scanner.WithDefaultConventions();
});

// Add Registries
x.AddRegistry(new SomeRegistry());
});

Debug.WriteLine(ObjectFactory.WhatDoIHave());
}

public class MyCustomConvention : IRegistrationConvention
{
public void Process(Type type, Registry registry)
{
if (!type.CanBeCastTo(typeof(IMyType)))
{
return;
}

string name = type.Name.Replace("SomeRubishName", String.Empty);
registry.AddType(typeof(IMyType), type, name);
}

我尝试使用 SelfConfigure 但找不到任何关于如何使用它来过滤配置文件的文档:
    public static void Configure()
{
Mapper.Initialize(x =>
{
// My Custom profile
x.AddProfile<MyMappingProfile>();

// Scan Assembly
x.SelfConfigure(Assembly.GetCallingAssembly());
});
}

另一个问题是如何报告所有已初始化的 map /配置文件(类似于 StructureMap 中的 ObjectFactory.WhatDoIHave())?

最佳答案

在 AutoMapper 的第 9 版中,可以通过这种方式完成

var configuration = new MapperConfiguration(cfg =>
{
// Add all Profiles from the Assembly containing this Type
cfg.AddMaps(typeof(MyApp.SomeClass));
});

如果您使用的是 ASP.NET Core,则有一个帮助扩展可以在 Startup.ConfigureServices 中注册所有配置文件
// UI project
services.AddAutoMapper(Assembly.GetExecutingAssembly());

或者
// Another assembly that contains a type
services.AddAutoMapper(Assembly.GetAssembly(typeof(MyApp.SomeClass)));

关于.net - 如何在 AutoMapper 中扫描和自动配置配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com