【问题标题】:Using dependency injection with AutoMapper ValueResolver that has constructor arguments使用具有构造函数参数的 AutoMapper ValueResolver 依赖注入
【发布时间】:2015-09-11 09:28:49
【问题描述】:

我有以下自定义值解析器:

public class ImageUrlResolver<T> : ValueResolver<T, string>
{
    private readonly ISettings _settings;

    public ImageUrlResolver(string size)
    {
        _settings = ObjectFactory.GetInstance<ISettings>();
    }

    ...
}

.ForMember(d => d.ImageUrl, 
    o => o.ResolveUsing<ImageUrlResolver>().ConstructedBy(() => new ImageUrlResolver("150x150"))

我正在尝试更新它,以便可以注入 StructureMap 的 IContainer 而不是使用 ObjectFactory,但我不确定当解析器具有构造函数参数时如何构造它。还有什么我可以做的吗?

【问题讨论】:

  • 您已经将参数传递给 ImageUrlResolver 类(大小参数)。是什么阻止您传递其他参数?
  • 因为我试图用 StructureMap 的IContainer 接口来构造它,而不是将它耦合到ObjectFactory 类。我在下面找到了一个解决方案。

标签: c# dependency-injection automapper


【解决方案1】:

我想出了一个解决办法。我现在将IContainer 注入配置文件,并将其传递给解析器。

public static void Initialise(IContainer container)
{
    var type = typeof(Profile);
    var profiles = AppDomain.CurrentDomain
                            .GetAssemblies()
                            .SelectMany(a => a.GetTypes())
                            .Where(t => type.IsAssignableFrom(t) && type != t)
                            .Select(container.GetInstance)
                            .Cast<Profile>()
                            .ToList();

    Mapper.Initialize(c =>
        {
            profiles.ForEach(c.AddProfile);
            c.ConstructServicesUsing(container.GetInstance);
        });
}

public class MyProfile : Profile
{
    private readonly IContainer _container;

    public MyProfile(IContainer container)
    {
        _container = container;
    }

    private static void Configure()
    {
        Mapper.CreateMap<Entity, Model>()
            .ForMember(d => d.ImageUrl, o => o.ResolveUsing<ImageUrlResolver>().ConstructedBy(() => new ImageUrlResolver(_container, "150x150"))
    }
}

也许不是最干净的解决方案,但它是我发现的唯一有效的解决方案。

【讨论】:

  • 你最后找到更好的解决方案还是还在用这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多