我正在使用automapper从dtos映射到域,反之亦然; 我正在使用自定义类型转换器进行转换,但我想使用简单的注入器ioc将依赖项注入到我的转换器类中;我做不到。 请告诉我如何实现这一目标?
public class DtoToEntityConverter : ITypeConverter<Dto, Entity>
{
private readonly IEntityRepository _entityRepository;
public DtoToEntityConverter (IEntityRepository entityRepository )
{
_entityRepository = entityRepository ;
}
public Entity Convert(ResolutionContext context)
{
}
}
答案 0 :(得分:9)
您需要通过AutoMapper配置服务:
var container = ConfigureSimpleInjectorContainer();
Mapper.Initialize(cfg => {
cfg.ConstructServicesUsing(type => container.GetInstance(type));
// The rest of your initialization
});
答案 1 :(得分:1)
每次我的容器无法覆盖我发布的一些代码时,我就会使用这种方法。
public class DtoToEntityConverter : ITypeConverter<Dto, Entity>
{
private readonly IEntityRepository _entityRepository;
public DtoToEntityConverter (IEntityRepository entityRepository )
{
_entityRepository = entityRepository ;
}
public Entity Convert(ResolutionContext context)
{
}
}
你将如何注册:
Mapper.CreateMap<From, To>().ConvertUsing(new DtoToEntityConverter(Ioc.Resolve<IEntityRepository>()));
Ioc静态类应该保存IUnitContainer,您可以在其中注册所有依赖项。
public static class IoC
{
public static IUnityContainer Unity { get; private set; }
public static T Resolve<T>()
{
return Unity.Resolve<T>();
}
public static T Resolve<T>(string key)
{
return Unity.Resolve<T>(key);
}
public static void Initialize(IUnityContainer unity)
{
Unity = unity;
}
}
注意:确保您已在映射之前创建了UnityContainer。您的问题不典型,您可以考虑重新设计它并保留映射(自动映射)以将模型映射到模型仅。但是在某种程度上你可能会考虑这种方法。