Dot-Net
使用 Ninject 注入 AutoMapper 依賴項
我無法使用 Ninject 將 AutoMapper 注入 ASP.NET MVC 2 應用程序。我使用 Jimmy Bogard 關於AutoMapper 和 StructureMap 類型配置的文章作為指南。
public class AutoMapperModule : NinjectModule { public override void Load() { Bind<ITypeMapFactory>().To<TypeMapFactory>(); Bind<Configuration>().ToSelf().InSingletonScope().WithConstructorArgument("mapper", MapperRegistry.AllMappers); Bind<IConfiguration>().To<Configuration>(); Bind<IConfigurationProvider>().To<Configuration>(); Bind<IMappingEngine>().To<MappingEngine>(); } }Ninject 在解析
Configuration.啟動 IObjectMapper 時出錯 沒有匹配的綁定可用,並且類型不是自綁定的。啟動路徑:
3)將依賴IObjectMapper注入到Configuration類型的建構子的參數映射器中
更新
現在正在使用以下綁定:
Bind<ITypeMapFactory>().To<TypeMapFactory>(); Bind<Configuration>().ToConstant(new Configuration(Kernel.Get<ITypeMapFactory>(), MapperRegistry.AllMappers())).InSingletonScope(); Bind<IConfiguration>().ToMethod(c => c.Kernel.Get<Configuration>()); Bind<IConfigurationProvider>().ToMethod(c => c.Kernel.Get<Configuration>()); Bind<IMappingEngine>().To<MappingEngine>();我在 GitHub 上發布了該模組。AutoMapper.Ninject。我的部落格上的更多資訊:http: //binaryspeakeasy.com/2010/09/automapper-ninject/
您可以這樣做是使用最新版本(目前為 2.2.0)的一個襯裡。
kernel.Rebind<IMappingEngine>().ToMethod(context => Mapper.Engine);另外,我同意 fodonnel,添加一個外觀來隱藏 Automapper 界面是個好主意,但是我不會直接從 Automapper 獲取簽名,除非您需要所有這些功能。
引入映射外觀可能也是一個好主意。而不是通過您的程式碼傳遞 IMappingEngine 創建一個 IObjectMapper 介面。我使用的介面包含直接取自 automappers 程式碼的方法簽名。
public interface IObjectMapper { TDestination Map(TSource source); TDestination Map(TSource source, TDestination destination); object Map(object source, Type sourceType, Type destinationType); object Map(object source, object destination, Type sourceType, Type destinationType); }您的配置仍將依賴於自動映射器。
我寫的一篇博文在這裡:http: //fodonnel.wordpress.com/2010/09/20/an-object-mapper-facade/