Roe*_*elF 5 c# abstract-class interface automapper
我正在使用AutoMapper在我的应用程序的不同层之间映射对象.一方面我有一个界面,如下所示:
public interface MyRepo
{
IEnumerable<IRootObject> GetItems(param);
}
Run Code Online (Sandbox Code Playgroud)
IRootObject看起来像这样:
public interface IRootObject
{
int Id { get; set; }
DateTime? Date { get; set; }
}
public interface IFirstSubObject : IRootObject
{
string MyFirstProp { get; set; }
}
public interface ISecondSubObject : IRootObject
{
string MySecondProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以GetItems()调用实际上只返回一个数组IxxxSubObjectItems.另一方面,结构如下所示:
public abstract class MyCustomRoot
{
protected MyCustomRoot(){}
public int Id { get; set; }
public DateTime? Date { get; set; }
}
public class MyCustomFirstSub : MyCustomRoot
{
public MyCustomFirstSub() : base() {}
public string MyFirstProp { get; set; }
}
public class MyCustomSecondSub : MyCustomRoot
{
public MyCustomSecondSub () : base() {}
public string MySecondProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我已经像这样设置了映射器
AutoMapper.Mapper.CreateMap<IRootObject, MyCustomRoot>
.Include<IFirstSubObject, MyCustomFirstSub>
.Include<ISecondSubObject, MyCustomSecondSub>();
AutoMapper.Mapper.CreateMap<IFirstSubObject, MyCustomFirstSub>();
AutoMapper.Mapper.CreateMap<ISecondSubObject, MyCustomSecondSub>();
Run Code Online (Sandbox Code Playgroud)
但我一直在获取MapperExceptions("无法构造抽象类",这在某种程度上是有意义的).我也打电话AssertConfigurationIsValid,这传递了这段代码.
如果我不作MyCustomRoot抽象类,则映射工作,但我得到的名单MyCustomRoot的对象,而实际上我想有一个列表MyCustomxxxSub,因为有一个工厂以后使用这个类型生成正确的UI ...
我希望有人可以指出我正确的方向!
谢谢!
好的,我找到了实际做到这一点的方法!所以使用上面提供的接口和类,你可以做这样的事情
(记住:MyCustomRoot类是抽象的)
AutoMapper.Mapper.CreateMap<IRootObject, MyCustomRoot>
.Include<IFirstSubObject, MyCustomFirstSub>
.Include<ISecondSubObject, MyCustomSecondSub>();
Run Code Online (Sandbox Code Playgroud)
然后使用followig Map调用来映射对象:
public List<MyCustomRoot> PerformMapping(List<IRootObject> rootObjects)
{
var returnList = new List<CustomRoot>();
foreach(var rootObject in rootObjects)
{
var abstractObject = (MyCustomRoot)Mapper.Map(rootObject, rootObject.GetType(), typeof(MyCustomRoot));
returnList.Add(abstractObject);
}
return returnList;
}
Run Code Online (Sandbox Code Playgroud)
现在我实际上得到了一个MyCustomRoot对象数组,这些都是具体的实现.
这正是我想要的!
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |