2010-12-07 17 views
26

Creo que mi cerebro se ha frito ya que estoy luchando por hacer algo simple. En mi aplicación tengo el siguiente código para configurar Nhibernate (mi problema no es específico de Nhibernate).Almacenar una expresión Lambda en una variable

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

Sin embargo, necesito almacenar la configuración (las cosas dentro de ExposeConfiguration) dentro de una variable privada. Puedo hacer lo siguiente:

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

Donde _configuration es una variable privada. Pero esto no agrega mis opciones de configuración adicionales (las cosas de EventListeners). He jugado con varias cosas, pero creo que mi conocimiento de lambda no es tan bueno como pensaba.

Agradecería su ayuda. Gracias

+0

Creo que también se debe publicar la declaración (delegado) de ExposeConfiguration , + qué es lo que quiere guardar en _configuration (la declaración también ayudaría). –

Respuesta

44

Una expresión lambda es simplemente un delegado que a menudo se asigna a una de las variantes Func<T1, T2, ..., TResult>.

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

Sustitución TResult y T1 con los tipos pertinentes.

Eso podría funcionar para usted.

+1

+1, pero tenga en cuenta que una expresión lambda puede asignarse a cualquier tipo de delegado compatible. Simplemente se usa con 'Func <>' – JaredPar

+0

Editado mi respuesta para hacerlo un poco más claro. :) –

+0

Genial, eso es lo que estaba buscando. Gracias – nfplee

0

Sure. Asumiendo _configuration va a almacenar lo que estaba usando en su primer bit de código. Debe ser algo como esto:

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

Si hay cualquier tipo de errores elenco del compilador, siempre se puede usar:

_configuration.Cast<IPostInsertEventListeners>(); 
Cuestiones relacionadas