I am having trouble injecting AutoMapper into an ASP.NET MVC 2 application using Ninject. I used Jimmy Bogard\'s post on AutoMapper and StructureMap type Configuration as a guid
You can do this is a one liner using the latest version (currently 2.2.0).
kernel.Rebind<IMappingEngine>().ToMethod(context => Mapper.Engine);
As an extra, I do agree with fodonnel, adding a facade to hide the Automapper interface is a good idea, however I wouldn't take the signatures directly from Automapper, unless you need all that functionality.
I got it working but it doesn't feel very clean creating an instance of the Configuration class. Any suggestions to clean it up further.
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>();
It might also be a good idea to introduce a mapping facade. Instead of passing IMappingEngine through out your code create an IObjectMapper interface. The interface I use contains method signatures taken directly out of automappers code.
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);
}
Your configuration is still going to be automapper dependent.
A blog post I wrote on it is here: http://fodonnel.wordpress.com/2010/09/20/an-object-mapper-facade/