加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 注入AutoMapper实例

发布时间:2020-12-16 09:13:46 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC应用程序,其中所有映射都以这种方式在引导期间注册: Mapper.CreateMapAdvicesModel,Advices(); 到目前为止,我们静态地使用了它“旧”的方式: Mapper.MapAdvice(adviceDto) 到现在为止还挺好. 更新到AutoMapper的第4版后,我发现建议使用
我有一个ASP.NET MVC应用程序,其中所有映射都以这种方式在引导期间注册:

Mapper.CreateMap<AdvicesModel,Advices>();

到目前为止,我们静态地使用了它“旧”的方式:

Mapper.Map<Advice>(adviceDto)

到现在为止还挺好.

更新到AutoMapper的第4版后,我发现建议使用它来构建实例.
有人能指出我如何正确地指示Castle将AutoMapper的实例注入我的依赖项并且不是静态地使用它.

我想象的是这样的:

var viewModel = mapper.Map<CartViewModel>(cart);

注入IMapper实例.

解决方法

我不认为services.AddSingleton<>是温莎城堡,所以下面是我的CastleWindsor安装程序.

private static void RegisterProfilesAndResolvers(IWindsorContainer container)
    {
        // register value resolvers
        container.Register(Types.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());

        // register profiles
        container.Register(Types.FromThisAssembly().BasedOn<Profile>().WithServiceBase().Configure(c => c.Named(c.Implementation.FullName)).LifestyleTransient());

        var profiles = container.ResolveAll<Profile>();

        var config = new MapperConfiguration(cfg =>
        {
            foreach (var profile in profiles)
            {
                cfg.AddProfile(profile);
            }
        });

        container.Register(Component.For<MapperConfiguration>()
            .UsingFactoryMethod(() => config));

        container.Register(
            Component.For<IMapper>().UsingFactoryMethod(ctx => ctx.Resolve<MapperConfiguration>().CreateMapper(ctx.Resolve)));
    }

我不确定这是否理想/最佳等,但似乎确实有效:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读