我正在努力将值传递给自定义ValueResolver的格式。我基本上试图将Int转换为基于我的ViewModel的对象。但是,我不能得到它的价值将它传递给我的ValueResolver如何将值传递给自定义ValueResolver?
我有以下的自定义ValueResolver:
public class CustomResolver : ValueResolver<CreateContainerViewModel, Container>
{
private int id = 0;
public CustomResolver(int? sourceId)
{
if(sourceId.HasValue)
id = sourceId.Value;
}
protected override Container ResolveCore(CreateContainerViewModel source)
{
if (id == 0) return null;
else
{
ISession _session = DependencyResolver.Current.GetService<ISessionFactory>().GetCurrentSession();
return _session.Get<Container>(id);
}
}
}
当我创建使用硬编码INT类似下面的代码
地图它工作正常Mapper.CreateMap<CreateContainerViewModel, Container>()
.ForMember(a => a.CurrentContainer, opt => opt.ResolveUsing(src => new CustomResolver(33)));
,但它不工作(投掷映射除外),当我尝试从我的视图模型中获得的价值
Mapper.CreateMap<CreateContainerViewModel, Container>()
.ForMember(dest => dest.CurrentContainer, opt => opt.MapFrom(src => new CustomResolver(src.CurrentContainerId)));
任何人都可以指向正确语法的方向,将值传递给自定义ValueResolver吗?
感谢
UPDATE:
基本上尝试写这样的事:
public class IdToObjectResolver<T> : ValueResolver<int, T> where T : class
{
private ISession _session;
private int id;
public IdToObjectResolver(Nullable<int> sourceId)
{
_session = DependencyResolver.Current.GetService<ISessionFactory>().GetCurrentSession();
if(sourceId.HasValue)
id = sourceId.Value;
}
protected override T ResolveCore(int source)
{
return _session.Get<T>(source);
}
}
此代码犯规目前是有意义的,但只是想传递的int类型的方式。 ..
本页面http://automapper.codeplex.com/wikipage?title=Custom%20Value% 20Resolvers说自定义提供给解析器的源值 - 即将推出:) – TomL 2012-02-15 16:20:49
[.ForMember(dest => dest.SomePropA,opt => opt.ResolveUsing().FromMember(SRC => src.propA))] [1] [1]:http://stackoverflow.com/questions/5368525/automapper-using-the-structure-returned- by-a-custom-resolver –
2014-07-17 13:17:00