AutoMapper初始化

时间:2016-07-26 05:15:48

标签: c# automapper

我们正在构建一个应用程序,我们有一个DataTranslationLayer,负责将数据库对象转换为视图模型对象。

因为我们没有将数据库对象传递给Web项目,所以我们无法在global.asax中初始化。我们需要在DataTranslationLayer中初始化。

问题在于,当我们实例化该类时,它会进行另一次初始化,现在会导致问题,因为AutoMapper只能初始化一次。

所以我的问题是,有没有人实施类似的解决方案,你做了什么?

是否在我们在应用程序启动时调用的DTL中创建静态类的解决方案是否有更优雅的解决方案?

2 个答案:

答案 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加载所有配置文件。