我在传递自定义值解析器的值格式方面遇到了困难。我基本上试图根据我的 ViewModel 将 Int 转换为对象。然而,我无法将这个值传递给我的值解析器。
我有以下自定义值解析器:
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吗?
谢谢。
更新:
基本上是在尝试编写类似于以下内容的代码:
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类型的方法...