Como uso o AutoMapper com o Ninject.Web.Mvc?
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.
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
.
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
.
Minha pergunta é: como faço para o Ninject injetar umIRepository
para dentroIdToEntityConverter
?