4

IDynamicObject를 둘러싼 블로그 게시물을 모두 기반으로 C# 4에서 method_missing을 구현하는 방법을 알아 내려고했습니다.C# 4에서 method_missing을 구현하고 실제로 값을 반환 할 수 있습니까?

내가하고 싶은 일은 리포지토리가있는 비즈니스 로직 레이어가 있고 비즈니스 로직 레이어에서 메서드가 누락 된 경우 리포지토리를 호출하고 그 결과를 전달하는 것입니다.

RepositoryMetaObect에서
public class CustomerServices : IDynamicObject 
{ 
    protected CustomerRepository _Repository = new CustomerRepository(); 

    MetaObject IDynamicObject.GetMetaObject(Expression parameter) 
    {      
     return new RepositoryMetaObject<CustomerRepository>(_Repository, parameter);       
    } 
} 

내가 지금처럼 통화 메소드를 구현 : 그래서 나는이처럼 보이는 클래스가

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에 속성에 액세스하려고하면, 바로 달려 있습니다 :

는 지금은이 작업을 수행 할 때.

아무도 도와 줄 수 있습니까? 난 당신이 상수 표현으로 반환 된 값으로 새로운 metaobject를을 반환해야 생각 https://dl.getdropbox.com/u/277640/BusinessLogicLayer.zip

+0

훌륭하게 표현하고 질문 할 수 있습니다. 답변을 위해 필요한 모든 정보가 나와 함께 나에게 큰 도움을줍니다. –

답변

1

:

전체 코드는 ehre를 다운로드 할 수 있습니다.

분명히 this CodeProject page에서 발생합니다. 시도 :

0

하지만 myCustomer에 속성에 액세스하려고하면, 단지

당신이 service.GetByID 후 줄에 중단 점을 설정할 수 달려 있습니다 워스 (1)? 그 전화에서 당신이 정말로 돌아 왔는지 확인하십시오. 그렇지 않으면 정확히 무슨 일이 일어 났는지 말하기 어렵습니다.

0

대신

return this; 

의이

return RepositoryMetaObject<CustomerRepository>(
     _Repository 
    , System.Linq.Expressions.Expression.Constant(returnValue, returnValueType) 
); 

같은 일을 시도 (왜 확실하지 여전히,하지만 나를 위해 작동).

관련 문제