我们正在构建一个应用程序,我们有一个DataTranslationLayer,负责将数据库对象转换为视图模型对象。
因为我们没有将数据库对象传递给Web项目,所以我们无法在global.asax中初始化。我们需要在DataTranslationLayer中初始化。
问题在于,当我们实例化该类时,它会进行另一次初始化,现在会导致问题,因为AutoMapper只能初始化一次。
所以我的问题是,有没有人实施类似的解决方案,你做了什么?
是否在我们在应用程序启动时调用的DTL中创建静态类的解决方案是否有更优雅的解决方案?
答案 0 :(得分:0)
静态AutoMapper只是一个薄层。您可以使用不同的配置轻松创建一个或多个AutoMapper实例。 有关如何执行此操作,请参阅my other answer。
答案 1 :(得分:0)
我不知道您将数据库对象传递到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加载所有配置文件。