以下是关于 Structure Map 和 Windsor 的配置示例:
http://www.cprieto.com/index.php/2009/08/20/using-automapper-with-castle-windsor/
但我没有找到 Ninject 的任何内容。
您知道如何将这些映射转换为 Ninject 吗?
您知道如何将这些映射转换为 Ninject 吗?
非常简单,只需加载此模块:
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>();
}
}
在Configuration
的构造函数中,不仅只提供MapperRegistry.AllMappers
参数,实际上会绑定每个单独的IObjectMapper
,然后使用内核本身获取WithConstructorArgument
绑定中的构造函数参数。之所以这样做,是为了让您可以将自己的IObjectMapper
绑定加载到内核中,如果您决定编写自己的自定义映射器。
自行绑定Configuration
,然后方法绑定IConfiguration
和IConfigurationProvider
的原因是,与Windsor不同,Ninject没有提供任何一流的支持来将多个接口绑定到单个目标范围,因此需要这种方式。
就是这些了。编写带有依赖项的容器类,依赖于IConfiguration
(如果要创建新的映射)和/或IMappingEngine
(用于实际映射),Ninject会毫无问题地注入它们。
如果您想实现超松散的耦合,并且每个映射都定义在自己的类中,那么您可能需要查看Ninject的Convention扩展,它可以进行类似于Windsor的FromAssembly
的程序集扫描。这也可以加载您可能在单独的库中定义的任何自定义IObjectMapper
类。
public class AutoMapperModule : NinjectModule
{
public override void Load()
{
Bind<IMappingEngine>().ToMethod(ctx => Mapper.Engine);
}
}
Configuration
改为ConfigurationStore
吗?我认为这是v2中唯一相关的更改;它实现了与v1中的Configuration
相同的IConfiguration
接口,并接受与v1中的Configuration
相同的构造函数参数。 - AaronaughtProfile
也在其中。目前,我有一组通过Ninject.Extensions.Conventions
发现的它们,然后将其馈送到Mapper.Initialize()
中。可能会重新审视,当我需要注入转换器/格式化程序/任何一个这样的东西时。希望@jbogard能够撰写一篇规范文章和/或更新一两个段落,介绍v2的新抽象如何与DI配合使用,直到那变得关键之前。正在使用反编译器进行分析;需要阅读测试(至少如果想要了解Ninject的最佳方法)。暂时先感谢您的回复和答案。 - Ruben BartelinkIMapRegistration
接口,并且所有实现类都在启动时运行。它们都在构造函数中使用IProfileExpression
(仍然是v2 API的一部分),然后我编写了一个名为WithProfile
的扩展方法,该方法只是通过使用WithConstructorArgument
并在保留上下文的情况下调用IConfiguration
get上的CreateProfile
方法来创建配置文件。有点啰嗦,但就是这样。 - Aaronaught