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 )
私が思う問題は、Invoke の結果に対して何もしていないことです。MetaObject 自体を返すだけです。
今私がこれを行うとき:
dynamic service = new CustomerServices();
var myCustomer = service.GetByID(1);
GetByID が呼び出されますが、myCustomer のプロパティにアクセスしようとすると、ハングします。
誰でも助けてもらえますか?
完全なコードは、 https ://dl.getdropbox.com/u/277640/BusinessLogicLayer.zip からダウンロードできます。