代码之家  ›  专栏  ›  技术社区  ›  eddyP23

具有泛型问题的Automapper值解析器

  •  0
  • eddyP23  · 技术社区  · 6 年前

    A B C ,我需要一个外部服务来注入一些额外的数据。因此,我写了一封信 ValueResolver<T> 哪里 T B C OR 运算符,我使用泛型 T 在这里

    为清楚起见,我的值解析器如下所示:

    public class MyValueResolver<T>: IValueResolver<A, T, string>
    {
        private readonly IMyService _service;
    
        public MyValueResolver(IMyService service)
        {
            _service = service;
        }
    
        public string Resolve(A source, T destination, string destMember, ResolutionContext context)
        {
            // do something using only source and _service.
            return ...;
        }        
    }
    

    现在,在我的创业公司,我注册automapper如下 services.AddAutoMapper(); . 因此,当我在应用程序的任何地方使用它时,我只需要注入 IMapper 在构造函数中,它将解析 MyValueResolver 具有 IMyService

    MyValueResolver<B> MyValueResolver<C> . 我尝试了以下方法:

            var mappingConfig = new MapperConfiguration(cfg => {
                cfg.AddProfile(new MappingProfile());
                cfg.ConstructServicesUsing(MyValueResolver =>
                    new MyValueResolver<B>(service));
                cfg.ConstructServicesUsing(MyValueResolver =>
                    new MyValueResolver<C>(service));
            });
            var mapper = new Mapper(mappingConfig);
    

    MyValueResolver<C> MyValueResolver<B> cfg.ConstructServicesUsing(MyValueResolver<C> => new MyValueResolver<C>(service));

    有没有什么解决办法,或者我可以使用另一种模式?

    1 回复  |  直到 6 年前
        1
  •  1
  •   eddyP23    6 年前

    我在用 ConstructServicesUsing

    ValueResolver 我要解决和 Object 是已解析的实例。你应该回来 null

    所以它看起来是这样的:

    cfg => cfg.ConstructServicesUsing(type => type == typeof(MyValueResolver<B>) ? new MyValueResolver<B>(service) : null));
    

    这个答案归功于@LucianBargaoanu。