如何在Ninject中使用AutoMapper.5.2.0?

4
我现在正在开发一个大型的ASP.NET MVC 5项目,使用Ninject框架实现DI。实际上这是我第一次使用Ninject,我迫切需要知道如何最佳实践地使用AutoMapper 5.2.0。
通过谷歌搜索,我找到了一些示例,但它们演示的是AutoMapper的旧版本,而新版本中有一些已弃用的方法。
我的解决方案包括以下几个项目:
1.Core 2.Data
3.Service 4.Web
我正在link上开发同一个项目。

没有所谓的最佳实践,请阅读这里。只有用例和业务需求,以确定您想要/需要如何实现它... 如果您告诉我们更多细节,我们可能会给您一些具体的答案。 - kayess
感谢您的帮助,这是我正在处理的项目 http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pattern-and-dep/ - Morz
你想在哪一层进行映射? - kayess
我想在Ioc.Web层中进行映射。 - Morz
1
好的,使用Automapper的哪些部分让您感到不清楚?请将所有这些细节都编辑到您的问题中! - kayess
我需要知道如何在哪里进行配置,并且如何将其绑定到Ninject容器中。 - Morz
1个回答

8

在Ninject中设置AutoMapper需要完成以下三件事情:

  1. 绑定 AutoMapper.IMapper 接口。
  2. 指引 AutoMapper 使用 Ninject 进行服务调用。
  3. 初始化 AutoMapper 映射关系。

下面是我使用的适用于此目的的 NinjectModule

public class AutoMapperModule : NinjectModule
{
    public override void Load()
    {
        Bind<IMapper>().ToMethod(AutoMapper).InSingletonScope();
    }

    private IMapper AutoMapper(Ninject.Activation.IContext context)
    {
        Mapper.Initialize(config =>
        {
            config.ConstructServicesUsing(type => context.Kernel.Get(type));

            config.CreateMap<MySource, MyDest>();
            // .... other mappings, Profiles, etc.              

        });

        Mapper.AssertConfigurationIsValid(); // optional
        return Mapper.Instance;
    }
}

那么您只需将 AutoMapper.IMapper 注入到您的类中,而不是使用静态的 Mapper


顺便提一下,这是使用AutoMapper 4.2.1。我希望在v5中不会有太大的差异。 - Dave Thieben
1
对于那些使用这个答案的人,请不要忘记在内核中注册AutoMapperModule:var kernel = new StandardKernel(new AutoMapperModule()); - dalcam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接