使用AutoMapper时遇到一些问题。我到处搜索,但要么我不理解解决方案(当没有提供代码时)或者它不适用于我的情况。
我有我的个人资料:
public class MyCustomProfile : Profile
{
public MyCustomProfile()
{
CreateMap<DTO.Person, MyDataSet.PersonRow>();
}
}
我有我的方法:
public static void TestAutoMapper(DTO.Person p)
{
if (Mapper.Instance == null)
{
Mapper.Initialize(cfg => cfg.AddProfile<MyCustomProfile>());
}
MyDataSet.PersonRow pr = Mapper.Map<MyDataSet.PersonRow>(p);
}
但我的问题是:我需要添加我的个人资料.ConstructUsing(p => dts.get_XYdataset().Person.NewPersonRow());
,其中dts
是MyDataSet
的一个实例。
而且我还需要MyDataSet dts
方法中的TestAutoMapper(DTO.Person p)
实例来保存结果MyDataSet.PersonRow pr
如下:
dts.get_XYdataset().Person.AddPersonRow(pr)
但我不知道该怎么办。如果我把所有内容都放在TestAutoMapper()
方法中,它会很好用,但当然它不干净,我想通过创建一个配置文件并在初始化映射器时调用它来分离逻辑。
编辑
所以我修改了我的TestAutoMapper()
方法,如下所示:
public static void TestAutoMapper(DTO.Person p)
{
if (Mapper.Instance == null)
{
Mapper.Initialize(cfg => cfg.AddProfile<MyCustomProfile>());
}
using (MyDataSet dts = new MyDataSet())
{
MyDataSet.PersonRow pr = Mapper.Map<MyDataset.PersonRow>(p, opt => opt.Items["Dataset"] = dts);
dts.get_XYdataset().Person.AddPersonRow(pr);
}
然后我尝试关注自定义解析器的迷你tuto并实现了这个类:
public class CustomResolver: IMemberValueResolver<object, object, MyDataSet, MyDataSet>
{
public MyDataSet Resolve(object source, object destination, MyDataSet dts, MyDataSet dts2, ResolutionContext context)
{
if (dts != null)
{
return dts;
}
else if (dts2 != null)
{
return dts2;
}
return new MyDataSet();
}
}
但我认为这没关系。但好吧,无论如何我都没有尝试过。但现在我在CreateMap<DTO.Person, MyDataSet.PersonRow>()
声明中被困在我的配置文件构造函数中。如何在Options.Items["Dataset"]
获得.ConstructUsing()
?
示例显示有关成员的CustomResolver但是如何指定构造函数?
如果我可以这样做,那将是如此完美:
CreateMap<DTO.Person, MyDataSet.PersonRow>()
.ConstructUsing(Options.Items["Dataset"].get_XYdataset().Person.NewPersonRow());
我知道我需要帮助可能很愚蠢,但即使阅读文档我也真的不明白。
你怎么看 ?
谢谢,
Hellcat8
好的,最后它适用于此代码:
public static class PersonManager
{
private static MapperConfiguration _config;
private static IMapper _mapper;
public static void TestAutoMapper(DTO.Person p)
{
if (_config == null)
{
_config = new MapperConfiguration(cfg => cfg.AddProfile<MyCustomProfile>());
}
if (_mapper == null)
{
_mapper = _config.CreateMapper();
}
using (MyDataSet dts = new MyDataSet())
{
XYdataset.PersonRow pr = _mapper.Map<XYdataset.PersonRow>(p, opt => opt.Items["Dataset"] = dts);
dts.get_XYdataset().Person.AddPersonRow(pr);
}
}
}
我有我的个人资料:
public class MyCustomProfile : Profile
{
public MyCustomProfile()
{
CreateMap<DTO.Person, XYdataset.PersonRow>()
.ConstructUsing((source, resolutionContext) =>
(resolutionContext.Items["Dataset"] as MyDataSet)
.(get_XYdataset().Person.NewPersonRow());
}
}