【问题标题】:Automapper ValueResolver with dependency resolved via StructureMapAutomapper ValueResolver 通过 StructureMap 解决依赖关系
【发布时间】:2016-02-10 16:46:45
【问题描述】:

这是我目前正在使用的(简化并在控制台应用程序中运行):

public class SomeValueResolver : ValueResolver<DateTime, long> 
{
    private readonly ISomeDependency _someDependency;

    public SomeValueResolver(ISomeDependency _someDependency)
    {
        // ...
    }

    protected override long ResolveCore(DateTime source)
    {
        // ...
    }
}

public class MyRegistry : Registry
{
    public MyRegistry()
    {
        For<ISomeDependency >()
        .Singleton()
        .Use<SomeDependency>();
    }
}

public static class AutoMapperConfiguration
{
    public static void Configure(IContainer container)
    {
        Mapper.Initialize(cfg =>
        {
        cfg.ConstructServicesUsing(t => container.GetInstance(t));
        cfg.AddProfile(new AutomapperProfile1());
        });
    }
}

public class AutomapperProfile1 : Profile
{
    protected override void Configure()
    {
        CreateMap<Source, Target>()
        .ForMember(dest => dest.Y, opt => opt.ResolveUsing<SomeValueResolver>().FromMember(e => e.X))
        .IgnoreAllSourcePropertiesWithAnInaccessibleSetter();
    }
}

public class Source
{
    public DateTime X { get; set; }
}

public class Target
{
    public DateTime Y { get; set; }
}


// main method
var container1 = new Container(new MyRegistry());
AutoMapperConfiguration.Configure(container1);
var source = new Source { X = DateTime.UtcNow };
var target = Mapper.Map<Target>(source);

不幸的是,我遇到了一个例外:

Unable to create a build plan for concrete type SomeValueResolver

new SomeValueResolver(ISomeDependency)
  ? ISomeDependency= **Default**

1.) Attempting to create a BuildPlan for Instance of SomeValueResolver -- SomeValueResolver
2.) Container.GetInstance(SomeValueResolver)

这可以解决吗(请原谅双关语)。

【问题讨论】:

  • 你能指定你使用的Automapper/StrutureMap的版本吗?
  • 最新通过 nuget。

标签: c# automapper structuremap


【解决方案1】:

我已经使用 StructureMap 4.0.1.318Automapper 4.2.0.0 尝试了您的代码。

我确实得到了一个不同的异常,因为与 DateTime 到 Int64 的错误转换有关。

我想你打算写这个:

public class Target
{
    public long Y { get; set; }
}

通过改变类型,映射就像一个魅力。

这可能与SomeDependency 类有关,该类应该拥有一个无参数的构造函数以通过这种方式解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2015-10-27
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多