I have an ASP.NET Core project (netcoreapp2.0) that references models in a class library project (netstandard2.0). I'm trying to use Mapster to map objects stored in the class library. The documentation for Mapster says to call the Scan method from Startup.cs using the code:
TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)
Where I'm having issues is how to best get the assembly reference for the class library to pass to the Scan method. I think this is more of a general .NET question and not Mapster specific. The best I've been able to come up with is the following but it feels awkward.
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;
}
Is there a better way to handle this?
UPDATE: Apparently my solution above breaks code-first migrations. Can anyone suggest a way to accomplish this?
Get the assembly using a type defined in it.
var assembly = Assembly.GetAssembly(typeof(NameSpace.TypeName));
Update to address your comment (but I don't recommend this):
Use GetExecutingAssembly()
instead of GetEntryAssembly()
and your solution in the question won't break. Bonus: filter the results of GetReferencedAssemblies()
with something like .Where(a => a.Name.StartsWith("CompanyName"))
and you could even get rid of the name
argument.
I don't recommend this because:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With