{"id":1244,"date":"2020-06-17T10:16:03","date_gmt":"2020-06-17T10:16:03","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=1244"},"modified":"2020-06-17T11:12:26","modified_gmt":"2020-06-17T11:12:26","slug":"como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\/","title":{"rendered":"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1245\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg\" alt=\"\" width=\"1068\" height=\"848\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg 1068w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire-300x238.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire-1024x813.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire-768x610.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire-610x484.jpg 610w\" sizes=\"auto, (max-width: 1068px) 100vw, 1068px\" \/><\/p>\n<p>Hangfire es una librer\u00eda en la que podemos ejecutar nuestros procesos en Background en nuestros desarrollos en .NET y .NET Core. En este art\u00edculo vamos a ver c\u00f3mo utilizar la inyecci\u00f3n que trae .NET Core de serie en nuestros proyectos y con esto,\u00a0 evitarnos el tener otro aspecto de configuraci\u00f3n adicional. As\u00ed, nuestros procesos de Background son mucho m\u00e1s sencillos de configurar y sobre todo, podemos testearlos al igual que cualquier otro elemento \ud83d\ude09<\/p>\n<p><!--more--><\/p>\n<h1 id=\"qu\u00e9-es-hangfire\">\u00bfQu\u00e9 es Hangfire?<\/h1>\n<p>En las aplicaciones Web hay ocasiones en las que necesitamos tener algunas tareas en Background cuya ejecuci\u00f3n no paralice el funcionamiento normal de nuestro desarrollo. Por ejemplo, un proceso de env\u00edo de mails, un proceso de importaci\u00f3n de datos, etc. Para esto, Hangfire es una librer\u00eda que nos proporciona una serie de utilidades de serie como planificar cu\u00e1ndo queremos lanzar este proceso (d\u00eda, hora, periodicidad), tambi\u00e9n proporciona un marco de reintentos (si alg\u00fan proceso falla, se vuelve a lanzar), y por si fuera poco, tambi\u00e9n dispone de una interfaz Web en la que podemos ver todos los procesos que se tiene planificado y el resultado de las ejecuciones.<\/p>\n<p>S\u00e9 que muchos lo estar\u00e9is pensando. Para todos estos procesos en un desarrollo Cloud en un entorno Microsoft hac\u00e9is uso de un servicio serverless como son las <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/\">Azure Functions<\/a>. S\u00ed, en cierta manera, las Azure Functions son muchos m\u00e1s que WebJobs, con lo cual no estamos comparando el mismo servicio. Imaginemos un escenario en el que tenemos una Web sin tr\u00e1fico nocturno y con el servidor pr\u00e1cticamente parado, por lo que disponemos de una franja que podemos aprovechar para todas estas tareas sin la necesidad de adquirir un servicio extra (con un coste asociado al mismo). Como muchas veces digo, para un determinado escenario, no hay solo una opci\u00f3n v\u00e1lida, sino que nos interesa conocer las alternativas y escoger la mejor (o la menos mala :P).<\/p>\n<p>Para aquellos que es la primera vez que escuchan hablar sobre Hangfire les recomiendo que vayan a leer est\u00e9\u00a0<a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/hangfire-crear-procesos-segundo-plano-c\/\">art\u00edculo<\/a>\u00a0que escribi\u00f3 el gran\u00a0<a href=\"https:\/\/twitter.com\/jcmartinezg23\">Juan Carlos Mart\u00ednez<\/a>\u00a0y luego continuar con la lectura de este art\u00edculo.<\/p>\n<h1 id=\"como-funciona-hangfire-dentro-de-una-aplicaci\u00f3n-de-net\">\u00bfC\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n de .NET?<\/h1>\n<p>Cuando instalamos HangFire en nuestra soluci\u00f3n y le indicamos proyecto web que vamos a utilizar HangFire, tenemos que hacer dos cosas:<\/p>\n<ol>\n<li>Elegir la unidad de almacenamiento donde va a residir toda la gesti\u00f3n de procesos. Esta unidad de almacenamiento puede ser desde un SQL Server, CosmosDB, MariaDb, Azure BlobStorage, etc<\/li>\n<li>El punto donde va a arrancar HangFire,\u00a0 por ejemplo <a href=\"http:\/\/avenger.com\/hangfire\">http:\/\/avenger.com\/hangfire<\/a> en el que podemos ver todos los procesos que est\u00e1n en ejecuci\u00f3n y los resultados obtenidos.<\/li>\n<\/ol>\n<p>Como pod\u00e9is ver, lo que hace Hangfire es montar otra aplicaci\u00f3n independiente dentro de nuestro servidor Web aprovechando la misma infraestructura. Esto provoca que, si no se indica nada, toda inyecci\u00f3n de dependencia que tengamos en .NET Core no la tendremos en los procesos que implementemos en HangFire.<\/p>\n<p>Cuando hablamos de inyecci\u00f3n de dependencias, todos estamos pensando en las interfaces de nuestra l\u00f3gica de negocio, etc&#8230; pero hay muchas m\u00e1s cosas que se inyectan en .NET Core que van desde las propias settings de configuraci\u00f3n hasta el sistema de Logs. Por lo que, aunque pensemos que quiz\u00e1 no me interese inyectarle las dependencias de mi proyecto a los procesos de HangFire porque es un proceso r\u00e1pido y eficaz y que solo se ejecuta una vez no requiere de inyecci\u00f3n de dependencias, creo que estamos en un contexto diferente.<\/p>\n<h2 id=\"necesitamos-inyecci\u00f3n-de-dependencias-en-un-proceso-en-hangfire\">Necesitamos inyecci\u00f3n de dependencias en un proceso en HangFire<\/h2>\n<p>Si en lugar de poner HangFire pusiera Azure Functions, tendr\u00edamos las dos opiniones:<\/p>\n<ol>\n<li>Gente partidaria de tener la inyecci\u00f3n de dependencia\n<ul>\n<li>PROS: Puedo testear mis m\u00e9todos<\/li>\n<li>Contra: El arranque de un proceso cuya naturaleza sea breve, le estamos a\u00f1adiendo un tiempo que en ocasiones es justo el tiempo que necesitamos<\/li>\n<\/ul>\n<\/li>\n<li>Gente en contra\n<ul>\n<li>PRO: Simplicidad del proceso, velocidad de ejecuci\u00f3n<\/li>\n<li>Contra: Testeable solo en un entorno<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Mi opini\u00f3n en cuanto a Hangfire, es que el escenario en el que estamos no es el mismo que el que tenemos en una Functions, principalmente porque en nuestra aplicaci\u00f3n arranca el servidor y hay carga todas las dependencias que tiene y las resuelve. El escenario no es el mismo y la ejecuci\u00f3n tampoco. Por lo tanto, para m\u00ed, aunque HangFire es un subproceso dentro de nuestro servidor, en caso de que estos procesos requieran elementos del desarrollo (algo de lo m\u00e1s normal) deber\u00eda tener una inyecci\u00f3n de dependencia para tener un ciclo de vida \u201cnormal\u201d dentro del desarrollo.<\/p>\n<h1 id=\"manos-a-la-obra\">Manos a la obra<\/h1>\n<p>Partimos de la base que ya tenemos creado un proyecto de Dotnet<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-bash\" data-lang=\"bash\">dotnet new webapi\r\n<\/code><\/pre>\n<\/div>\n<p>Agregaremos los paquetes de Nuget necesarios para hacer uso de Hangfire<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-bash\" data-lang=\"bash\"> dotnet add package hangfire.core\r\n dotnet add package hangfire.aspnetcore\r\n dotnet add package hangfire.memorystorage\r\n<\/code><\/pre>\n<\/div>\n<p>Si todo ha ido correctamente y arrancamos la soluci\u00f3n tendremos estos paquetes instalados<img decoding=\"async\" src=\"https:\/\/www.theavenger.dev\/posts\/images\/hangfire\/nuget.PNG\" alt=\"solution nuget\" \/><\/p>\n<p>El siguiente paso ser\u00eda, como en casi todo en Dotnet Core, a\u00f1adir los middleware necesarios para que arranque Hangfire.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddHangfire(configuration =&gt; configuration\r\n                                   .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)\r\n                                   .UseSimpleAssemblyNameTypeSerializer()\r\n                                   .UseRecommendedSerializerSettings()\r\n                                   .UseMemoryStorage());\r\n            services.AddHangfireServer();\r\n            services.AddControllers();\r\n        }\r\n<\/code><\/pre>\n<\/div>\n<p>En el Hangfire, hemos establecido la configuraci\u00f3n tal y como indica la p\u00e1gina oficial de <a href=\"https:\/\/docs.hangfire.io\/en\/latest\/getting-started\/aspnet-core-applications.html\">HangFire<\/a> y en el \u00faltimo puesto le hemos indicado que utilice como almacenamiento un almacenamiento en memoria. Para almacenar toda esta informaci\u00f3n existen multitudes de opciones como SQl Server, CosmosDB, Azure Blob Storage, etc.<\/p>\n<p>En el m\u00e9todo de configurar, a\u00f1adiremos que arranque un Dashboard para que tengamos una visualizaci\u00f3n de los procesos que se est\u00e1n ejecutando.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            app.UseHttpsRedirection();\r\n            app.UseRouting();\r\n            app.UseAuthorization();\r\n            app.UseHangfireDashboard();\r\n            app.UseEndpoints(endpoints =&gt;\r\n            {\r\n                endpoints.MapControllers();\r\n            });\r\n        }\r\n<\/code><\/pre>\n<\/div>\n<p>Si arrancamos nuestra aplicaci\u00f3n y nos dirigimos a la ruta \u201c\/hangfire\u201d visualizamos la siguiente pantalla:<img decoding=\"async\" src=\"https:\/\/www.theavenger.dev\/posts\/images\/hangfire\/dashboard.PNG\" alt=\"dashboard hangfire\" \/><\/p>\n<p>Por poner un caso de uso, implementaremos un servicio de env\u00edo de mail diario. Para ello, nos creamos una carpeta que se llame \u201cServices\u201d. En esta carpeta tenemos, por un lado, un servicio con su interfaz que env\u00eda mail (en este ejemplo lo simula, ya que no es parte de este art\u00edculo). Tambi\u00e9n nos crearemos una interfaz para el servicio que vamos a implementar en Hangfire<\/p>\n<p>La interfaz tendr\u00e1 la siguiente estructura:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public interface ISendMailServices\r\n{\r\n    Task&lt;bool&gt; SendMailAsync(string mail, string message);\r\n}\r\n<\/code><\/pre>\n<\/div>\n<p>y la implementaci\u00f3n seria la siguiente:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public class SendMailServices : ISendMailServices\r\n{               \r\n    public async  Task&lt;bool&gt; SendMailAsync(string mail, string message)\r\n    {\r\n        await Task.Delay(3000);\r\n        return true;\r\n    }\r\n}\r\n<\/code><\/pre>\n<\/div>\n<p>Ahora para el servicio que vamos a implementar en Hangfire tendremos la siguiente interfaz:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public interface IHangFireServices\r\n{\r\n    Task ScheduleJob();\r\n}\r\n<\/code><\/pre>\n<\/div>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">    public class HangFireServices : IHangFireServices\r\n    {\r\n        private readonly IConfiguration configuration;\r\n        private readonly ISendMailServices sendMailServices;\r\n\r\n        public HangFireServices(IConfiguration configuration,ISendMailServices sendMailServices )\r\n        {\r\n            this.configuration = configuration;\r\n            this.sendMailServices = sendMailServices;\r\n        }\r\n        public async Task ScheduleJob()\r\n        {\r\n            var email = this.configuration.GetSection(\"sendmail\").Value;\r\n            var message = \"Hola q ase\";\r\n            await this.sendMailServices.SendMailAsync(email, message);            \r\n        }\r\n    }\r\n<\/code><\/pre>\n<\/div>\n<h2 id=\"tuneando-el-arranque\">Tuneando el arranque<\/h2>\n<p>En primer lugar, creamos la clase \u201cHangfireActivator\u201d que depende de una clase JobActivator que es la que configura la inyecci\u00f3n de dependencias para el servicio de Hangfire.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public class HangfireActivator : JobActivator\r\n{\r\n    private readonly IServiceProvider serviceProvider;\r\n    public HangfireActivator(IServiceProvider serviceProvider)\r\n    {\r\n        serviceProvider = serviceProvider;\r\n    }\r\n    public override object ActivateJob(Type jobType)\r\n    {\r\n        return serviceProvider.GetService(jobType);\r\n    }\r\n}\r\n<\/code><\/pre>\n<\/div>\n<p>Una vez que tenemos el desarrollo por un lado, tendremos que inyectar las dependencias en nuestro StarUp, para ello dentro del m\u00e9todo \u201cConfigureServices\u201d a\u00f1adiremos las siguientes l\u00edneas de c\u00f3digo.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">    services.AddTransient&lt;ISendMailServices, SendMailServices&gt;();\r\n    services.AddTransient&lt;IHangFireServices, HangFireServices&gt;();\r\n<\/code><\/pre>\n<\/div>\n<p>Ahora en el m\u00e9todo \u201cConfigure\u201d, en primer lugar a\u00f1adiremos un nuevo par\u00e1metro IServiceProvider serviceProvider. Luego a\u00f1adiremos la siguiente l\u00ednea para resolver la inyecci\u00f3n de dependencia dentro de Hangfire<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)\r\n{\r\n    GlobalConfiguration.Configuration.UseActivator(new HangfireActivator(serviceProvider));\r\n<\/code><\/pre>\n<\/div>\n<p>Para finalizar ya podemos crear el Job de Hangfire con una l\u00ednea como la siguiente:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">RecurringJob.AddOrUpdate&lt;IHangFireServices&gt;(hangfire =&gt; hangfire.ScheduleJob(), Cron.Weekly);\r\n<\/code><\/pre>\n<\/div>\n<p>Si ahora ejecutamos el c\u00f3digo y vamos a la pesta\u00f1a \u201cTareas Recurrentes\u201d, observamos que tendremos programada la ejecuci\u00f3n de la tarea que acabamos de a\u00f1adir.<img decoding=\"async\" src=\"https:\/\/www.theavenger.dev\/posts\/images\/hangfire\/dashboard.PNG\" alt=\"dashboard hangfire\" \/><\/p>\n<h1 id=\"resumiendo\">Resumiendo<\/h1>\n<p>DotNet Core nos proporciona un sistema muy modular y eso hace que aplicaciones de un tercero se puedan integrar de una manera f\u00e1cil y sencilla. En este art\u00edculo hemos visto c\u00f3mo hacerlo con Hangfire. Como hab\u00e9is podido observar, Hangfire es una librer\u00eda muy potente y con multitud de opciones. S\u00ed, lo tengo que reconocer. Por si no lo hab\u00e9is notado a\u00fan, Hangfire es algo que me gusta mucho \ud83d\ude42<\/p>\n<p>Pod\u00e9is ver el ejemplo en mi repositorio de\u00a0<a href=\"https:\/\/github.com\/AdrianDiaz81\/Blog-examples\/tree\/master\/hangfire\">Github<\/a><\/p>\n<p>Happy codding!<\/p>\n<p>PD: Tambi\u00e9n puedes encontrar este art\u00edculo en <a href=\"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/\" target=\"_blank\" rel=\"noopener noreferrer\">mi blog personal.<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Hangfire es una librer\u00eda en la que podemos ejecutar nuestros procesos en Background en nuestros desarrollos en .NET y .NET Core. En este art\u00edculo vamos a ver c\u00f3mo utilizar la inyecci\u00f3n que trae .NET Core de serie en nuestros proyectos &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":1245,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-1244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire | ENCAMINA<\/title>\n<meta name=\"description\" content=\"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire\" \/>\n<meta property=\"og:description\" content=\"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-17T10:16:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-17T11:12:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1068\" \/>\n\t<meta property=\"og:image:height\" content=\"848\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Adri\u00e1n D\u00edaz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire\",\"datePublished\":\"2020-06-17T10:16:03+00:00\",\"dateModified\":\"2020-06-17T11:12:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\\\/\"},\"wordCount\":1307,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2020\\\/06\\\/Hangfire.jpg\",\"articleSection\":[\".NET\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\\\/\",\"url\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/\",\"name\":\"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2020\\\/06\\\/Hangfire.jpg\",\"datePublished\":\"2020-06-17T10:16:03+00:00\",\"dateModified\":\"2020-06-17T11:12:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/dependency-hangfire-dotnet\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2020\\\/06\\\/Hangfire.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2020\\\/06\\\/Hangfire.jpg\",\"width\":1068,\"height\":848},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire | ENCAMINA","description":"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire","og_description":"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET","og_url":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2020-06-17T10:16:03+00:00","article_modified_time":"2020-06-17T11:12:26+00:00","og_image":[{"width":1068,"height":848,"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg","type":"image\/jpeg"}],"author":"Adri\u00e1n D\u00edaz","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire","datePublished":"2020-06-17T10:16:03+00:00","dateModified":"2020-06-17T11:12:26+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\/"},"wordCount":1307,"commentCount":0,"image":{"@id":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg","articleSection":[".NET"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-inyectar-las-dependencias-de-dotnet-core-en-nuestros-procesos-de-hangfire\/","url":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/","name":"C\u00f3mo inyectar las dependencias de Dotnet Core en nuestros procesos de Hangfire | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#primaryimage"},"image":{"@id":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg","datePublished":"2020-06-17T10:16:03+00:00","dateModified":"2020-06-17T11:12:26+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"Adri\u00e7an D\u00edaz nos explica de forma magistral c\u00f3mo funciona Hangfire dentro de una aplicaci\u00f3n .NET","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.theavenger.dev\/posts\/dependency-hangfire-dotnet\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2020\/06\/Hangfire.jpg","width":1068,"height":848},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=1244"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/1245"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=1244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=1244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=1244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}