我试图根据 IDynamicObject 上浮动的所有 2 篇博客文章来弄清楚如何在 C# 4 中实现 method_missing。
我想要做的是有一个具有存储库的业务逻辑层,如果业务逻辑层缺少该方法,只需调用存储库并传递其结果。所以我有一个看起来像这样的类:
public class CustomerServices : IDynamicObject
{
protected CustomerRepository _Repository = new CustomerRepository();
MetaObject IDynamicObject.GetMetaObject(Expression parameter)
{
return new RepositoryMetaObject<CustomerRepository>(_Repository, parameter);
}
}
在 RepositoryMetaObect 中,我实现了 Call 方法,如下所示:
public override MetaObject Call(CallAction action, MetaObject[] args)
{
typeof(T).GetMethod(action.Name).Invoke(_Repository, getParameterArray(args));
return this;
}
(RepositoryMetaObject 的其余代码可能并不有趣,但我已将其包含在此处: http: //pastie.org/312842)
我认为的问题是我从来没有对调用的结果做任何事情,我只是返回 MetaObject 本身。
现在当我这样做时:
dynamic service = new CustomerServices();
var myCustomer = service.GetByID(1);
调用 GetByID,但如果我尝试访问 myCustomer 上的属性,则只是挂起。
有人可以帮忙吗?
完整代码可以在ehre下载:https ://dl.getdropbox.com/u/277640/BusinessLogicLayer.zip