У меня есть статический класс AutoMapperConfiguration
, который устанавливает сопоставления AutoMapper:
static class AutoMapperConfiguration()
{
internal static void SetupMappings()
{
Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>();
}
}
где IdToEntityConverter
- это пользовательский 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.NET Global.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 ()
, я переместил его во что-то который, как я знаю, вводит правильно, один из моих контроллеров, например:
открытый класс RepositoryController: Controller
{
статический RepositoryController ()
{
AutoMapperConfiguration.SetupMappings ();
}
}
По-прежнему получаю NullReferenceException
.
Мой вопрос: как заставить Ninject внедрить IRepository
в IdToEntityConverter
?