![](/img/trans.png)
[英]Inject DbContext to repository based on the generic type using Simple Injector
[英]Automapper inject dependencies into custom type converter using Simple injector (Ioc)
我正在使用 automapper 从 dtos 映射到域,反之亦然; 我正在使用自定义类型转换器进行转换,但我想使用简单的注入器 ioc 将依赖项注入到我的转换器类中; 我不能那样做。 请告诉我如何实现这一目标?
public class DtoToEntityConverter : ITypeConverter<Dto, Entity>
{
private readonly IEntityRepository _entityRepository;
public DtoToEntityConverter (IEntityRepository entityRepository )
{
_entityRepository = entityRepository ;
}
public Entity Convert(ResolutionContext context)
{
}
}
您需要通过AutoMapper配置服务:
var container = ConfigureSimpleInjectorContainer();
Mapper.Initialize(cfg => {
cfg.ConstructServicesUsing(type => container.GetInstance(type));
// The rest of your initialization
});
每次我的容器无法达到我发布的问题时,我就会使用这种方法。
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。 您的问题不典型,您可以考虑重新设计它并保留映射(自动映射)以仅将模型映射到模型。 但可能在某种程度上你有奇怪的要求,你可以考虑这种方法。
我正在使用 Automapper 6.1.1 和 Microsoft.Extensions.DependencyInjection,这对我有用......创建类型转换器,例如
public class ChargesConverter :
ITypeConverter<ChargesQueryResult, IEnumerable<Charge>>
{
private readonly IToggleFeatures features;
private readonly ITierThresholds tierThresholds;
public ProductWrapperChargesConverter(IToggleFeatures features, ITierThresholds tierThresholds)
{
this.features = features;
this.tierThresholds = tierThresholds;
}
// other functionality
}
在映射配置文件中
this.CreateMap<ProductWrapperChargesQueryResultAdapter, IEnumerable<Charge>>().ConvertUsing<ProductWrapperChargesConverter>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.