Dot-Net

使用 Ninject 注入 AutoMapper 依賴項

  • October 11, 2012

我無法使用 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/

引用自:https://stackoverflow.com/questions/3615095