结构图和温莎的配置示例如下: http://www.cprieto.com/index.php/2009/08/20/using-automapper-with-castle-windsor/如何配置Automapper与Ninject 2.0注入?
但是我还没找到Ninject的东西。
你知道如何将这些映射转换为Ninject吗?
结构图和温莎的配置示例如下: http://www.cprieto.com/index.php/2009/08/20/using-automapper-with-castle-windsor/如何配置Automapper与Ninject 2.0注入?
但是我还没找到Ninject的东西。
你知道如何将这些映射转换为Ninject吗?
public class AutoMapperModule : NinjectModule
{
public override void Load()
{
Bind<IMappingEngine>().ToMethod(ctx => Mapper.Engine);
}
}
这真的很容易,只需加载该模块:
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
是不像温莎,Ninject不提供多个接口结合到单个目标范围,因此,本hack任何一流的支持。
这就是它的全部。用IConfiguration
(如果您想创建新地图)和/或IMappingEngine
(实际执行映射)编写您的容器类,并且Ninject将注入它们而不会有任何问题。
如果您想要进行超松散耦合并且在其自己的类中定义了所有映射,那么您可能需要查看用于Ninject的Conventions Extension,它可以执行类似于Windsor的FromAssembly
的组装扫描。这也可以加载你可能在一个单独的库中定义的任何自定义IObjectMapper
类。
你是否曾经有过一个AutoMapper v2模块敲入和/或单线程来解释这种类型的策略是否适用于v2? – 2012-06-12 07:22:27
@RubenBartelink:你有没有试过把'Configuration'改成'ConfigurationStore'?我认为这是v2中唯一相关的变化;它实现了相同的'IConfiguration'接口,并接受与v1中'Configuration'相同的构造函数参数。 – Aaronaught 2012-06-13 23:29:00
认为'档案'也在混合。现在我有一组通过'Ninject.Extensions.Conventions'发现的东西,然后将它们送入Mapper.Initialize()。当我需要注入一个转换器/格式化器/这些被调用的任何一个时,可能会重新访问。希望@jbogard可能会产生一个规范文章和/或更新一两个关于v2的新抽象如何适合DI的方法,然后才会变得至关重要。正在用反编译器进行分析;需要阅读测试(至少如果Ninject的最佳方式是如何实现的话)。现在,ta为你的回应和这个答案。 – 2012-06-14 00:23:53