You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core项目中如何获取类库程序集引用用于Mapster扫描?

获取类库程序集用于Mapster Scan的几种方法

嗨,这个问题在.NET开发里挺常见的,我给你几个靠谱的解决方案,按推荐优先级排序:

1. 通过类库中的具体类型获取(最推荐)

这是最简单也最可靠的方式——只要你能访问到类库中的任意一个模型类(或者任何类型),直接通过typeof()获取它所属的程序集就行。

比如你的类库中有个UserModel,在Startup.cs里可以这么写:

using YourLibraryNamespace; // 先引用类库的命名空间
using Mapster;

public void ConfigureServices(IServiceCollection services)
{
    // 获取类库的程序集
    var libraryAssembly = typeof(UserModel).Assembly;
    
    // 传入Mapster的Scan方法
    TypeAdapterConfig.GlobalSettings.Scan(libraryAssembly);

    // 其他服务配置...
}

这种方法的优势在于:只要类库被正确引用,就不会出错,而且不需要硬编码程序集名称,后续类库重命名也不用改这里的代码。

2. 通过程序集名称加载

如果你不想依赖具体类型,可以直接通过程序集的全名(或者短名称)加载。注意这里的名称是项目的AssemblyName,不是生成的dll文件名(通常两者一致,但如果手动修改过项目属性就不一样了)。

示例代码:

using System.Reflection;
using Mapster;

public void ConfigureServices(IServiceCollection services)
{
    // 替换成你的类库程序集名称
    var libraryAssembly = Assembly.Load("YourLibraryAssemblyName");
    
    TypeAdapterConfig.GlobalSettings.Scan(libraryAssembly);

    // 其他服务配置...
}

⚠️ 注意:如果后续修改了类库的程序集名称,这里必须同步更新,否则会抛出加载失败的异常,所以这种方法不如第一种灵活。

3. 扫描已加载的程序集并筛选

如果你的解决方案有多个类库需要扫描,或者不确定具体类型,可以遍历当前AppDomain中已加载的所有程序集,通过命名空间或其他条件筛选出目标程序集。

示例代码:

using System.Reflection;
using System.Linq;
using Mapster;

public void ConfigureServices(IServiceCollection services)
{
    // 筛选出命名空间以"YourLibraryNamespace"开头的程序集
    var targetAssemblies = AppDomain.CurrentDomain.GetAssemblies()
        .Where(assembly => assembly.GetTypes().Any(type => type.Namespace?.StartsWith("YourLibraryNamespace") ?? false))
        .ToArray();
    
    TypeAdapterConfig.GlobalSettings.Scan(targetAssemblies);

    // 其他服务配置...
}

这种方法适合批量处理多个类库,但要注意筛选条件要准确,避免误扫到无关的程序集。


内容的提问来源于stack exchange,提问作者Jason

火山引擎 最新活动