我有一个ASP.NET核心项目(netcoreapp2.0),它引用了类库项目(netstandard2.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;
}
有没有更好的方法来解决这个问题?
更新:显然我的解决方案破坏了代码优先迁移。任何人都可以建议一种方法来实现这一目标吗?
答案 0 :(得分:3)
使用其中定义的类型获取程序集。
var assembly = Assembly.GetAssembly(typeof(NameSpace.TypeName));
更新以解决您的评论(但我不建议这样做):
使用GetExecutingAssembly()
代替GetEntryAssembly()
,问题中的解决方案不会中断。奖励:使用类似GetReferencedAssemblies()
的内容过滤.Where(a => a.Name.StartsWith("CompanyName"))
的结果,您甚至可以摆脱name
参数。
我不推荐这个,因为: