Como uso o AutoMapper com o Ninject.Web.Mvc?

Configuração

eu tenho umAutoMapperConfiguration classe estática que configura os mapeamentos do AutoMapper:

static class AutoMapperConfiguration()
{
    internal static void SetupMappings()
    {
        Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>();
    }
}

OndeIdToEntityConverter<T> é um costumeITypeConverter que se parece com isso:

class IdToEntityConverter<T> : ITypeConverter<long, T> where T : Entity
{
    private readonly IRepository _repo;

    public IdToEntityConverter(IRepository repo)
    {
        _repo = repo;
    }

    public T Convert(ResolutionContext context)
    {
        return _repo.GetSingle<T>(context.SourceValue);
    }
}

IdToEntityConverter leva umIRepository em seu construtor para converter um ID de volta para a entidade real, pressionando o banco de dados. Observe como ele não possui um construtor padrão.

Nos meus ASP.NETGlobal.asax, é para isso que tenhoOnApplicationStarted() eCreateKernel():

protected override void OnApplicationStarted()
{
    // stuff that's required by MVC
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);

    // our setup stuff
    AutoMapperConfiguration.SetupMappings();
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibRepository>();

    return kernel;
}

assimOnApplicationCreated() chamaráAutoMapperConfiguration.SetupMappings() para configurar os mapeamentos eCreateKernel() ligará uma instância deNHibRepository aoIRepository interface.

Problema

Sempre que executo esse código e tento obter o AutoMapper para converter um ID de categoria novamente em uma entidade de categoria, recebo umAutoMapperMappingException que diz que nenhum construtor padrão existe emIdToEntityConverter.

Tentativas

Adicionado um construtor padrão paraIdToEntityConverter. Agora eu recebo umNullReferenceException, o que indica que a injeção não está funcionando.

Tornou o privado_repo campo em uma propriedade pública e adicionou o[Inject] atributo. Ainda recebendoNullReferenceException.

Adicionado o[Inject] atributo no construtor que leva umIRepository. Ainda recebendoNullReferenceException.

Pensando que talvez Ninject não possa interceptar oAutoMapperConfiguration.SetupMappings() ligarOnApplicationStarted(), Mudei para algo que eu sei que está injetando corretamente, um dos meus controladores, assim:

public class RepositoryController : Controller
{
    static RepositoryController()
    {
        AutoMapperConfiguration.SetupMappings();
    }
}

Ainda recebendoNullReferenceException.

Pergunta, questão

Minha pergunta é: como faço para o Ninject injetar umIRepository para dentroIdToEntityConverter?

questionAnswers(2)

yourAnswerToTheQuestion