5

我有一个引用类库项目 (netstandard2.0) 中的模型的 ASP.NET Core 项目 (netcoreapp2.0)。我正在尝试使用 Mapster 来映射存储在类库中的对象。Mapster 的文档说使用以下代码从 Startup.cs 调用 Scan 方法:

TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)

我遇到的问题是如何最好地将类库的程序集引用传递给 Scan 方法。我认为这更像是一个一般的 .NET 问题,而不是 Mapster 特定的问题。我能想到的最好的是以下,但感觉很尴尬。

private Assembly GetAssemblyByName(string name)
{
    var assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies();
    var assemblyName = assemblies.FirstOrDefault(i => i.Name == name);
    var assembly = Assembly.Load(assemblyName);
    return assembly;
}

有没有更好的方法来处理这个?

更新:显然我上面的解决方案打破了代码优先迁移。谁能建议一种方法来实现这一点?

4

1 回答 1

7

使用其中定义的类型获取程序集。

var assembly = Assembly.GetAssembly(typeof(NameSpace.TypeName));

更新以解决您的评论(但我不建议这样做):

使用GetExecutingAssembly()而不是,GetEntryAssembly()您在问题中的解决方案不会中断。奖励:用类似的GetReferencedAssemblies()东西过滤结果,.Where(a => a.Name.StartsWith("CompanyName"))你甚至可以摆脱name争论。

我不推荐这个,因为:

  1. 我们最终将硬编码程序集名称(直接或间接);我宁愿使用强类型。引用程序集的更改应该会破坏您的构建。
  2. 我们最终会为启动性能付出代价。
于 2018-04-25T02:09:24.930 回答