Structure Map和Windsor有配置示例: http://www.cprieto.com/index.php/2009/08/20/using-automapper-with-castle-windsor/
但我没有为Ninject找到任何东西。
你知道如何将这些映射转换为Ninject吗?
答案 0 :(得分:5)
这真的很容易,只需加载这个模块:
public class AutoMapperModule : NinjectModule
{
public override void Load()
{
Bind<ITypeMapFactory>().To<TypeMapFactory>();
foreach (var mapper in MapperRegistry.AllMappers())
Bind<IObjectMapper>().ToConstant(mapper);
Bind<Configuration>().ToSelf().InSingletonScope()
.WithConstructorArgument("mappers",
ctx => ctx.Kernel.GetAll<IObjectMapper>());
Bind<IConfiguration>().ToMethod(ctx => ctx.Kernel.Get<Configuration>());
Bind<IConfigurationProvider>().ToMethod(ctx =>
ctx.Kernel.Get<Configuration>());
Bind<IMappingEngine>().To<MappingEngine>();
}
}
有几点需要注意:
它不仅仅提供MapperRegistry.AllMappers
作为Configuration
的构造函数参数,而是实际上绑定每个个体IObjectMapper
,然后使用内核本身来获取构造函数参数WithConstructorArgument
绑定。这样做的原因是,如果您决定编写自己的自定义映射器,则可以将自己的IObjectMapper
绑定加载到内核中。
自我绑定Configuration
然后绑定方法IConfiguration
和IConfigurationProvider
的原因与Windsor不同,Ninject不提供任何一流的绑定支持多个接口到单个目标范围,因此这个黑客。
这就是它的全部内容。在IConfiguration
(如果你想创建新地图)和/或IMappingEngine
(实际进行映射)中编写依赖项的容器类,Ninject会毫无问题地注入它们。
如果你想进行超松散耦合并在其自己的类中定义每个映射,那么你可能想看看Ninject的Conventions Extension,它可以进行类似于温莎的FromAssembly
。这也可以加载您可能在单独的库中定义的任何自定义IObjectMapper
类。
答案 1 :(得分:2)
public class AutoMapperModule : NinjectModule
{
public override void Load()
{
Bind<IMappingEngine>().ToMethod(ctx => Mapper.Engine);
}
}