私はカスタムValueResolverに値を渡すためのフォーマットに苦労しています。私は基本的に私のViewModelに基づいてIntとObjectを変換しようとしています。しかし、私はそれが私のValueResolverにそれに値を渡すことができませんカスタムValueResolverに値を渡す方法は?
I以下のカスタムValueResolverを持っている:私は次のコード
のようにハードコーディングされた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);
}
}
}
Mapper.CreateMap<CreateContainerViewModel, Container>()
.ForMember(a => a.CurrentContainer, opt => opt.ResolveUsing(src => new CustomResolver(33)));
が、私は試してみて、私のviewmodelから値を取得するときには、(マッピングの例外をスロー)動作していない
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);
}
}
このコードのdoesntは、現在、意味をなさないが、ちょうどint型を渡すの方法を取得しようとしています。 ..
このページhttp://automapper.codeplex.com/wikipage?title=Custom%20Value% 20Resolversは、リゾルバに供給されたソース値をカスタマイズすることをお勧めします - 近日中に:) – TomL
[.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 –