Как мне использовать AutoMapper с Ninject.Web.Mvc?
у меня естьAutoMapperConfiguration
статический класс, который устанавливает сопоставления AutoMapper:
static class AutoMapperConfiguration()
{
internal static void SetupMappings()
{
Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>();
}
}
гдеIdToEntityConverter<T>
это обычайITypeConverter
это выглядит так:
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
занимаетIRepository
в своем конструкторе, чтобы преобразовать идентификатор обратно в фактическую сущность, ударив базу данных. Обратите внимание, что у него нет конструктора по умолчанию.
В моем ASP.NETGlobal.asax
это то, что я имею дляOnApplicationStarted()
а такжеCreateKernel()
:
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;
}
ТакOnApplicationCreated()
позвонюAutoMapperConfiguration.SetupMappings()
установить сопоставления иCreateKernel()
будет связывать экземплярNHibRepository
кIRepository
интерфейс.
Всякий раз, когда я запускаю этот код и пытаюсь заставить AutoMapper конвертировать идентификатор категории обратно в сущность категории, я получаюAutoMapperMappingException
который говорит, что по умолчанию не существует конструкторIdToEntityConverter
.
Добавлен конструктор по умолчанию дляIdToEntityConverter
, Теперь я получаюNullReferenceException
, что указывает на то, что инъекция не работает.
Сделал частный_repo
поле в публичную собственность и добавил[Inject]
приписывать. Все еще получатьNullReferenceException
.
Добавил[Inject]
атрибут на конструкторе, который принимаетIRepository
, Все еще получатьNullReferenceException
.
Думая, что, возможно, Ninject не может перехватитьAutoMapperConfiguration.SetupMappings()
вызыватьOnApplicationStarted()
Я переместил его в то, что, как я знаю, правильно вводит, в один из моих контроллеров, вот так:
public class RepositoryController : Controller
{
static RepositoryController()
{
AutoMapperConfiguration.SetupMappings();
}
}
Все еще получатьNullReferenceException
.
Мой вопрос, как я могу заставить Ninject вводитьIRepository
вIdToEntityConverter
?