ASP.NET MVC项目中如何实现将AutoMapper实例注入到依赖注入容器中?

2026-03-30 12:141阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计355个文字,预计阅读时间需要2分钟。

ASP.NET MVC项目中如何实现将AutoMapper实例注入到依赖注入容器中?

我有一个ASP.NET MVC应用程序,其中所有映射都在引导期间注册:Mapper.CreateMap(Advices()); 到目前为止,我们静态地使用了它的旧方式:Mapper.MapAdvice(adviceDto) 到现在为止,为了简化配置,我们将使用新的方式:Mapper.Map(adviceDto);

我有一个ASP.NET MVC应用程序,其中所有映射都以这种方式在引导期间注册:

ASP.NET MVC项目中如何实现将AutoMapper实例注入到依赖注入容器中?

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))); }

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

本文共计355个文字,预计阅读时间需要2分钟。

ASP.NET MVC项目中如何实现将AutoMapper实例注入到依赖注入容器中?

我有一个ASP.NET MVC应用程序,其中所有映射都在引导期间注册:Mapper.CreateMap(Advices()); 到目前为止,我们静态地使用了它的旧方式:Mapper.MapAdvice(adviceDto) 到现在为止,为了简化配置,我们将使用新的方式:Mapper.Map(adviceDto);

我有一个ASP.NET MVC应用程序,其中所有映射都以这种方式在引导期间注册:

ASP.NET MVC项目中如何实现将AutoMapper实例注入到依赖注入容器中?

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))); }

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