2010-12-07 4 views
26

나는 단순한 일을하기 위해 고심하고 있기 때문에 뇌가 튀었을 것으로 생각합니다. 내 응용 프로그램에서 Nhibernate (내 문제 Nhibernate 특정 아닙니다) 구성하려면 다음 코드가 있습니다.변수에 람다 식 저장하기

return Fluently.Configure() 
    .ExposeConfiguration(c => { 
     c.EventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { new LoggingEventListener() }; 
     c.EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[] { new LoggingEventListener() }; 
    }); 

그러나 개인 변수 내에 구성 (ExposeConfiguration 내부의 구성 요소)을 저장해야합니다. 다음을 할 수 있습니다 :

return Fluently.Configure() 
    .ExposeConfiguration(c => _configuration = c); 

여기서 _configuration은 개인 변수입니다. 그러나 이것은 추가 구성 옵션 (EventListeners 항목)을 추가하지 않습니다. 나는 여러 가지로 놀았지만 내 람다 지식은 내가 생각했던 것만 큼 좋지 않은 것 같아.

귀하의 도움에 감사드립니다. 감사합니다

+0

난 당신이 또한 ExposeConfiguration의 선언 (위임)를 게시해야한다고 생각 , + 당신이 _configuration에 저장하고자하는 것은 무엇인가 (선언은 또한 도움이 될 것이다). –

답변

44

람다 식은 종종 Func<T1, T2, ..., TResult> 변형 중 하나에 매핑되는 대리자 일뿐입니다. 관련 유형 TResultT1 교체

Func<T1, TResult> myVar = c => _configuration = c; 

.

그게 효과가있을 수 있습니다.

+1

+1하지만 람다 식은 모든 호환 대리자 형식에 매핑 될 수 있습니다. 그것은 단지'Func <>'와 함께 자주 사용됩니다 – JaredPar

+0

약간 더 명확하게하기 위해 내 대답을 편집했습니다. :) –

+0

위대한 그게 내가 무엇을 찾고 있었는지. 감사합니다 – nfplee

0

확실히. _configuration을 가정하면 첫 번째 코드 비트에서 사용하던 것을 저장하게됩니다. 그것은 다음과 같이 보일 것이다 : 컴파일러에서 캐스트 오류의 어떤 종류가있는 경우

return Fluently.Configure().ExposeConfiguration(c => { 
c.EventListeners.PostInsertEventListeners = _configuration; 
c.EventListeners.PostUpdateEventListeners = _configuration;}); 

, 당신은 항상 사용할 수 있습니다

_configuration.Cast<IPostInsertEventListeners>();