我(或者,很快,将会)使用AutoMapper将一堆业务对象映射到一堆WCF DTO。这似乎是一个不错的技巧 - 在.CreateMap
级别进行了大量的故障排除,但总体上觉得值得。直到我决定将我的业务逻辑隐藏在程序集之外。
BO和映射器生活在同一个项目中;他们分离外部装配DTO,public
(并且无论如何都需要通过通道)。没有必要公开BO,因为DTO现在可以完成这项工作,所以我想我会将他们的访问者重置为internal
。 Kaboom自动化。举例说明:
(来自BLL的代码,与AutoMapping相同)
public class TestObject
{
private int _myID;
public int MyID
{
get { return _myID; }
set { _myID = value; }
}
}
(来自服务层的代码)
public class TestObjectDTO
{
private int _myID;
public int MyID
{
get { return _myID; }
set { _myID = value; }
}
}
这将起作用
Mapper.CreateMap<TestObject, TestObjectDTO>();
直到我这样做:
internal class TestObject
...
,甚至只是这个,在TestObject
:
internal int MyID
任何人都可以向我解释这个吗?我不会把它称为“错误”,但它似乎与基于反射的映射的整个目的相矛盾,即允许不同目的的对象一起流畅地扩展。为什么AM不能处理映射,让我控制访问器?
答案 0 :(得分:0)
这是By Design。有两个选项要么使用您自己的解析器,它们可以使用(私有,受保护,内部等)或映射到接口并使用显式接口实现。
这两种方法都包含在之前SO线程的答案中:
答案 1 :(得分:-1)
来自MSDN
The internal keyword is an access modifier for types and type members. Internal types or members are accessible only within files in the same assembly
IE,标记为内部的任何内容只能由项目中的代码访问 - 这意味着引用的程序集(如AutoMapper)甚至看不到标记为内部的内容。基于反射的映射需要公共类和公共get / set属性。