我想将数据访问对象映射到域对象作为交叉关注点,并使用AOP(面向方面编程)解决问题。我喜欢做的是拦截存储库类并在处理程序类中进行映射。
public List<PersonEntity> GetAll()
{
List<PersonDao> daoPersons = FetchAll();
return daoPersons;
}
public class MapperCallHandler<TEntity> : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
IMethodReturn msg = getNext()(input, getNext);
msg.ReturnValue = Mapper.Map<TEntity>(msg.ReturnValue);
return msg;
}
}
编译器不喜欢这个。这是从GetAll()
方法返回的错误类型。
如果GetAll()
方法的更改返回类型为List<PersonDao>
,则它在运行时不起作用,因为处理程序将从GetAll()
方法返回的对象类型更改为{{ 1}}。
我通过从List<PersonEntity>
方法返回List<object>
来解决这个问题,但是我必须在调用该方法的类中进行显式转换。
有没有办法在不进行显式演员的情况下实现这一目标?或者是否无法在处理程序中更改返回类型以接受方法?