AutoMapper与Ninject混淆

时间:2012-06-07 19:40:41

标签: ninject automapper

对于初学者我正在使用这个模块:

    public class AutoMapperModule : NinjectModule
{
    public override void Load()
    {
        Bind<ITypeMapFactory>().To<TypeMapFactory>();
        foreach (var mapper in MapperRegistry.AllMappers())
        {
            Bind<IObjectMapper>().ToConstant(mapper);
        }

        Bind<AutoMapper.ConfigurationStore>().ToSelf().InSingletonScope().WithConstructorArgument("mappers", ctx => ctx.Kernel.GetAll<IObjectMapper>());
        Bind<IConfiguration>().ToMethod(ctx => ctx.Kernel.Get<AutoMapper.ConfigurationStore>());
        Bind<IConfigurationProvider>().ToMethod(ctx => ctx.Kernel.Get<AutoMapper.ConfigurationStore>());
        Bind<IMappingEngine>().To<MappingEngine>();
    }
}

我的所有地图都有一个bootstrapper类

        public static void Configure(IKernel kernel)
    {
        Mapper.Initialize(map => map.ConstructServicesUsing(t => kernel.Get(t)));
    }

我有解析器访问数据库并需要注入存储库。 它按原样运行,但我无法弄清楚如何使用单元测试和IMappingEngine。

        public HomeController(IMappingEngine mappingEngine)
    {
        _mappingEngine = mappingEngine;
    }

_mappingEngine.Map会抛出异常,因为不存在地图。 Mapper.Map有效。

我错过了什么?如何让我的引导程序使用单元测试,以便我的解析器中的存储库使用假/模拟存储库?

1 个答案:

答案 0 :(得分:1)

尝试更改映射的绑定。

Bind<IMappingEngine>().ToMethod(ctx => Mapper.Engine);