
Si te interesa, aquí puedes echarle un ojo: Expression Control for TFS Work Items
Bitácora dedicada a la programación de maquinitas tanto obsoletas como modernillas.
ExecuteMethod
, que en su forma más básica es algo así:ExecuteMethod
pasando el método original como parámetro. Se entiene mejor viendo el código directamente:ExecuteMethod
. Por ejemplo, podemos decidir escribir trazas de error usando el método Debug.Write
en un principio, para más adelante usar el registro de eventos de Windows, quedando entonces el método algo así:ExecuteMethod
para invocar métodos de tipo void
(es decir sin valor de retorno):return
:IMiClaseAuxiliar
y para construir los objetos de tipo MiClase
. Esto facilita enormemente la creación de pruebas unitarias, especialmente si usas algún mecanismo de mocking.FileWrapper
con su correspondiente interfaz:ItemsFilter
es una clase que contiene un puñado de criterios de filtrado para los datos que deben ser devueltos. Todo muy bonito y rebosante de felicidad.SerializationHelper.shared.cs
, de esta forma lo tengo disponible también en el cliente. Este es el código de la clase:DomainContext
) son instanciadas automáticamente por el motor de ASP.NET, asumiento que tienen un constructor sin parámetros. Pero claro, la inyección de dependencias se consigue precisamente pasando las dependencias como parámetros del constructor (hay otras formas, pero tampoco casan muy bien con la creación automática de la clase).DomainService
que use una factoría personalizada cada vez que necesite una instancia del servicio, cosa que se hace desde el constructor estático se la clase Global
de ASP.NET. Esa factoría personalizada es una clase que proporcionamos nosotros y desde la que podemos crear la instancia del servicio a nuestro gusto.DomainService
). La idea es usar inyección de dependencias para suministrar una capa de acceso a datos a la clase que implementa el servicio.Client.Services
de la parte cliente y el proyecto Services
de la parte servidor, quedando pues las dependencias entre proyectos tal que así:MyRiaApp.Web
:DomainService
.MyRiaApp.Services
expone un servicio RIA llamado MyRiaDomainService
que contiene métodos expuestos al cliente por medio del enlace RIA. Para simplificar, en este proyecto de ejemplo sólo se expone un método, que devuelve un entero con un contador de elementos que supuestamente son objetos útiles para la aplicación. Este es el código del servicio:IDataAccessLayer
cuyo código es este:IDataAccessLayer
podría ser este:MyRiaDomainService
, a la que pasamos una instancia de IDataAccessLayer
en el constructor; y también con la clase IDataAccessLayer
, a la que pasamos la cadena de conexión. Ahora se trata de hacer que ASP.NET use el inyector de dependencias (Unity, en este caso) para resolver las idems a la hora de crear instancias del servicio.Global.asax
en la que pegaremos el siguiente código (resalto las partes más interesantes):MyAppDomainServiceFactory
cada vez que necesite crear una instancia de un servicio RIA.UnityContainer
, que queda disponible para toda la aplicación por medio de Global.DependencyInjector
.DataAccessLayer
, que hemos registrado en el inyector de dependencias.MyAppDomainServiceFactory
para que obtenga las instancias de los servicios a partir del inyector de dependencias.IDataAccessLayer
en MyRiaDomainService
, en este caso.)MyRiaDomainService
tenemos un AuthenticationDomainService
que sólo tiene un constructor sin parámetros. Unity será capaz de crear una instancia de dicho servicio sin problemas, simplemente no le inyectará ninguna dependencia.Web.config
(estamos haciendo una "inyección de dependencias manual" en este caso). Pego aquí el contenido de dicho archivo (la cadena de conexión es un ejemplo, claro), que de paso muestra los elementos necesarios para que funcionen los servicios RIA:StringEnum
para que sea genérica, cosa que dejo como ejercicio para el (hipotético) lector.
App.xaml.cs
tal que así (suponiendo que usamos autenticación por formularios):WebContext.Current
.AuthenticationDomainService
):Assembly
, en concreto sus métodos GetManifestResourceNames
y GetManifestResourceStream
.Main
de Program.cs, al ejecutar el proyecto desde el propio Visual Studio verás lo siguiente en la ventana de resultados:SqlConnection
omnipresente, accesible desde cualquier lugar de la aplicación. Lo típico en estos casos es crear una clase estática de estado y almacenar la conexión como una propiedad de la misma. Entonces, las clases que necesitan acceso a la base de datos no tienen más que leer la susodicha propiedad de la susodicha clase.Connection
.2010 Developers, developers, developers, developers Powered by Blogger
Blogger Templates created by Deluxe Templates
Wordpress by Fearless Flyer