C# 自动映射初始化
我们有一个正在构建的应用程序,还有一个DataTranslationLayer,负责将数据库对象转换为视图模型对象 由于我们不将数据库对象传递给web项目,因此无法在global.asax中初始化。我们需要在DataTranslationLayer中初始化 问题是,当我们实例化该类时,它会进行另一次初始化,这导致了问题,因为AutoMapper被设计为只初始化一次 所以我的问题是,有人实施过类似的解决方案吗?你做了什么C# 自动映射初始化,c#,automapper,C#,Automapper,我们有一个正在构建的应用程序,还有一个DataTranslationLayer,负责将数据库对象转换为视图模型对象 由于我们不将数据库对象传递给web项目,因此无法在global.asax中初始化。我们需要在DataTranslationLayer中初始化 问题是,当我们实例化该类时,它会进行另一次初始化,这导致了问题,因为AutoMapper被设计为只初始化一次 所以我的问题是,有人实施过类似的解决方案吗?你做了什么 是在应用程序启动时调用的DTL中创建静态类的解决方案,还是有更优雅的解决方案
是在应用程序启动时调用的DTL中创建静态类的解决方案,还是有更优雅的解决方案?静态AutoMapper只是一个薄层。您可以轻松创建一个或多个具有不同配置的AutoMapper实例。
请参阅以了解如何执行此操作。我不知道不将数据库对象传入web项目意味着什么,但可能您有一个复杂的分层体系结构。在这种情况下,一种方法是使用反射加载所有配置文件:
var assembliesToScane = AppDomain.CurrentDomain.GetAssemblies();
var allTypes = assembliesToScan.SelectMany(a => a.ExportedTypes).ToArray();
var profiles =
allTypes
.Where(t => typeof(Profile).GetTypeInfo().IsAssignableFrom(t.GetTypeInfo()))
.Where(t => !t.GetTypeInfo().IsAbstract);
Mapper.Initialize(cfg =>
{
foreach (var profile in profiles)
{
cfg.AddProfile(profile);
}
});
您不直接引用任何一个配置文件,只需从当前AppDomain加载所有配置文件。Hmmm,很有趣。谢谢