Blog de Francisco Velázquez

otro blog personal

Posts Tagged ‘.net

Exportar a csv desde c#

leave a comment »

Una pequeña utilidad para exportar listas genéricas a csv, usando expresiones lambda.

public class ExportExcel<T> where T : class
    {
        private StringBuilder sb;        

        public ExportExcel()
        {            
            sb = new StringBuilder();
            if (HttpContext.Current != null)
                Context = HttpContext.Current;
        }

        public string Filename { get; set; }
        public HttpContext Context { get; set; }

        public void Export(List<T> l, Expression<Func<T, object>> expression)
        {
            if (string.IsNullOrEmpty(Filename))
                return;

            build(l, expression);

            Context.Response.AddHeader("content-disposition", "attachment;filename=" + Filename);
            Context.Response.Charset = string.Empty;
            Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Context.Response.ContentType = "application/CSV";            
            Context.Response.Write(sb.ToString());
            Context.Response.End();
        }

        public string ToString(List<T> l, Expression<Func<T, object>> expression)
        {            
            build(l, expression);
            return sb.ToString();
        }

        private void build(List<T> l, Expression<Func<T, object>> expression)
        {
            sb = new StringBuilder();
            List<string> propertiesName = new List<string>();
            NewArrayExpression array = expression.Body as NewArrayExpression;
            foreach (object obj in (IEnumerable<object>)(array.Expressions))
            {
                string propertyName = obj.ToString().Remove(0, obj.ToString().IndexOf(".") + 1);
                propertyName = propertyName.Replace(")", "");
                sb.Append(propertyName + ";");
                propertiesName.Add(propertyName);
            }
            sb.AppendLine();

            foreach (var i in l)
            {
                foreach (var propertyName in propertiesName)
                {
                    sb.Append(getPropertyValue(i, propertyName).ToString() + ";");
                }
                sb.AppendLine();
            }
        }

        internal static object getPropertyValue(object obj, string propertyName)
        {
            const System.Reflection.BindingFlags bindingFlags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance;

            var pi = typeof(T).GetProperties(bindingFlags).Where(prop => prop.Name == propertyName).SingleOrDefault();
            return pi.GetValue(obj, null);
        }
    }

Written by fravelgue

September 27, 2012 at 7:36 pm

Posted in .net

Tagged with , ,

Helper para ConfigurationElementCollection

leave a comment »

Interesante utilidad que ayuda muchísimo para trabajar con colecciones en archivos de configuración.

    [ConfigurationCollection(typeof(ConfigurationElement))]
    public class ConfigurationElementCollection<T> :
        ConfigurationElementCollection, IEnumerable<T> where T : ConfigurationElement, new()
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new T();
        }
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((T)(element)).ToString();
        }
        public T this[int idx]
        {
            get { return (T)BaseGet(idx); }
        }

        public new IEnumerator<T> GetEnumerator()
        {
            int count = base.Count;
            for (int i = 0; i < count; i++)
                yield return base.BaseGet(i) as T;
        }

Written by fravelgue

September 6, 2011 at 4:41 pm

Posted in development

Tagged with , , ,

Arquitectura CQRS y DDD

leave a comment »

Me pareció muy ilustrativa esta diapositiva.

via.

Written by fravelgue

March 17, 2011 at 7:04 pm

Posted in .net

Tagged with , ,

NuPack

leave a comment »

Sale a la luz NuPack, una nueva herramienta que viene a ayudar mucho en el desarrollo, sobre todo cuando se integran librerías o utilidades open source. Se añade funcionalidad similar a gems de ruby, y entra en competencia con nu-net, que precisamente hacía uso de ruby. La verdad es que la integración con visual studio y el uso de scaffold commands promete.

Esto refleja los cambios que está sufriendo Microsoft, la verdad es que me gusta la dirección en cuanto a herramientas y framework, así como la continua mejora de productos. Algo nuevo que probar 🙂

Update: Por ahora sólo hace falta que aumenten el número de paquetes disponibles. Aquí los existentes en nu.

Written by fravelgue

October 6, 2010 at 5:34 pm

Posted in development

Tagged with , , , ,

Consumir un WebService con autenticación básica desde .NET

leave a comment »

El título describe bastante bien lo que vamos a solucionar en este post.

public class SecureWebService : ThirdPartyWebService
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
        NetworkCredential credentials = Credentials as NetworkCredential;
        if (credentials != null)
        {
            string authInfo =
            ((credentials.Domain != null) && (credentials.Domain.Length > 0) ?
            credentials.Domain + @"\" : string.Empty) +
            credentials.UserName + ":" + credentials.Password;
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            webRequest.Headers["Authorization"] = "Basic " + authInfo;
        }
        return webRequest;
    }
}

via.

Written by fravelgue

October 5, 2010 at 12:38 pm

Posted in .net

Tagged with , , ,

Microsoft y el acceso a datos

with one comment

A través de Ayende, descubro otra nueva forma para realizar el acceso a datos.  Ayende critica no sin razón este nuevo método y parece que no es el único, porque desde microsoft llegan explicaciones, realmente algo positivo que se genere conversación.

Mi opinión es que este es un campo en el que Microsoft no lo ha estado haciendo bien, aunque parecía que iban por buen camino con EF, ahora de nuevo tenemos una nueva tecnología que sólo crea incertimbre.

En aplicaciones empresariales no podemos estar cambiando cada dos años de tecnología de acceso a datos; necesitamos tecnologías que perduren en el tiempo y que sigan manteniéndose y eso es lo que parece que Microsoft no ofrece. Creo que ahora mismo la única opción  es nHibernate, EF ha mejorado mucho situandolo al nivel de nHibernate, pero quién dice que seguirá haciéndolo.

Hay gente que defiende que tener opciones no es malo, de hecho es algo corriente en otras tecnologías, como Java. Pero creo que se debe explicar muy claramente cual es el ámbito de cada una, y no crear confusión con ellas. En este caso parece que va enfocado al desarrollo usando WebMatrix.

Para solucionar todos estos problemas, creo que es fundamental que se actualizen la documentación de p&p Data Guidance. Y por supuesto intentar aceptar soluciones externas sobre todo cuando éstas son mejores que las que se proponen.

Written by fravelgue

August 4, 2010 at 3:19 pm

Posted in development

Tagged with , , ,

Messaging y Service Bus

leave a comment »

Una muy interesante recopilación de apuntes para comenzar a entender como desarrollar aplicaciones usando mensajes. Tras esto pues a releer todos los post del siempre recomendado Ayende.

Y por último tenemos el código de MassTransit, NServiceBus, o la implementación de Ayende.

Un poco off-topic, pero que hablando de arquitectura y rendimiento no viene mal, por cierto ya es hora de una pequeña actualización.

Written by fravelgue

February 16, 2010 at 8:28 pm

Posted in development

Tagged with , ,

Data Access según Microsoft y Patterns & Practices

leave a comment »

He estado investigando que propone Microsoft en acceso a datos, y la verdad es que me ha resultado difícil encontrar algo reciente, actualizado y explicado de una manera clara. Uno un poco antiguo: p&p Repository Factory y otro en construcción y en exclusiva para VS 2010: p&p Data Guidance.

La verdad es que ha sido frustrante tener que buscar algo y encontrarse con documentos anticuados, desactualizados o sin finalizar. Aunque lo que más echaba de menos es un pequeño resumen que explique brevemente e indique las distintas opciones existentes. Ni que decir, que apenas se menciona NHibernate.

Esperemos que con la n-ésima propuesta de Microsoft Entity Framework, se actualicen y aclaren estos documentos y de paso a ver si les da por comentar alguna de las propuestas del exterior: ALT.NET.

Written by fravelgue

January 21, 2010 at 7:55 pm

Posted in development

Tagged with , , ,

Serialización Binaria en .Net: Protocol Buffers

leave a comment »

Debido a un proyecto en el que estoy ahora mismo estoy evaluando la serialización binaria en lugar de la habitual en XML. Parece que la implementación a través de BinaryFormatters no es la más adecuada. Parecen muy interesantes las implementaciones de Protocol Buffers que existen, tanto la de Jon Sket, de la que ya hablamos, tanto com la de Marc Grawell. Podemos ver en que se diferencia en este hilo de stackoverflow.

Written by fravelgue

July 13, 2009 at 12:42 pm

.Net Profilers

leave a comment »

Un pequeño recordatorio con los profilers de .net que he estado probando.

nprof (y en google code) bastante antiguo y con algunos cuelgues, pero opensource.

dotTrace Profiler, sin duda alguna el mejor que probé.

Profile Sharp, también opensource.

EQATEC Profiler.

Written by fravelgue

May 27, 2009 at 7:31 pm

Posted in development

Tagged with , , , ,