Amigo, me entristece 350 visualizaciones, para temas con tanto contenido, no te desanimes, acabo de bajar el ejemplo para adjuntarlo a un proyecto del trabajo que tengo que entregar.
Hola, podría implementar un contenedor de dependencias en .net framework clásico? Por ejemplo con el 4.8. Un saludo y q sepas q cada vez soy más fan de tu canal
Hola buenas el curso es este www.netmentor.es/Curso/programacion-web-csharp el problema es que por temas personales no puedo dedicarle todo el tiempo que me gustaría al canal/web y solo tengo un post mas después de este :(
@@NetMentor puedo ver en tu canal/web que tienes muy buen material, con buenas guias y consejos. En mi opinión la publicación de contenido no tiene que ser todos los dias o semanas, con que se vea actividad cada x tiempo la gente seguirá visitando tus post. Algo que es muy importante es que ese contenido sea de calidad y no darle tanta prioridad a la cantidad, como lo has venido haciendo hasta ahora me parece bien. Saludos
Hola! Cuando determinas qué tiempo de vida vas a utilzar no tenemos uno "mejor o peor" por defecto, sino que debes utilizar uno en base al caso de uso. Poniendonos en el entorno de una aplicación web: Si tienes un sistmema cache en memoria tendrías que utilziar singleton para que esa cache fuera a todas las request y usuarios, ya que con scoped únicamente sería válida para esa request. Otro caso de uso común es por ejemplo la configuración de la aplicación. Los controladores suelen ser scoped, esto se hace por múltiples razones, una de ellas es, si tienes un sistema de logs y quieres guardar un "trace" de por donde va el cóidigo, insancias el "correlationid" junto con la llamada, al ser scoped el mismo ID se mantiene en toda la request (y por lo tanto todos los logs). La idea de scoped es mantener el state de la request, depende del caso obviamente. Transient es el caso de uso mas raro, personalmente en el mundo web, únicamente los he neceistado cuando he creado backgroundworkers, pero sí son "raros" de utilizar. otro ejempo es cuando tienes un componente que no debe ser comparitdo, imaginate que tienes un servicio que crea algo de forma aleatoria, pues con transciente seria siempre diferente, no se si me explico. Espero que te sirva la explicación. un saludo!
Hace mucho (desde .net framework) que no toco wpf pero todo depende un poco de lo que queiras hacer. Pero en resumidas cuentas, singleton para todo lo que quieras mantener abierto/en memoria y transient para el resto. Scoped no tiene mucho sntido en wpf porque no compartes la aplicación entre múltiples clients (osea diferentes requests) un saludo
tengo una duda, yo use en una aplicación multiuser addsingleton y me comentaron que podria ocasionar conflictos entre usuarios viendo tu video entiendo que perfectamente lo que hace pero por ejemplo en servicios que ejecutan get a bases de datos, insert, select etc. crees que podrian generar conflicto ¿ seria mejor usar addscope? gracias por tu respuesta
para ese caso en concreto, no generarías conflicto, pero, mejor si utilzas scope o transient en caso de que en el futuro incluyas algo (aunque no creo) que pueda generar conflicto, royo el ID de la request en un log, etc. Un saludo!
Hola! pues depende un poco de lo que hagas en dichas implementaciones. Lo mas normal es definir los servicios que van a ejecutar la lógica como scoped, ya que estos van a ser ejecutados una vez por request. Pero, depende de lo que vayas inyectando para utilizar. Por ejemplo, si tienes un sistema de caché en memoria, ese sitema de caché deberá ser singleton, mientras que si tienes un sistema de caché en redis, puedes implementarlo transient. o por ejemplo la base de datos, si solo haces una query, puedes hacerlo tanto transient, como singleton como scoped, mientras que si haces mas de una es recomendable no hacerlo transient, porque instanciarias más de una vez dicho servicio para acceder a la base de datos. Luego si almacenas infroamción en un servicio singleton esta información esta común para todas las request, así que cuidado con utilziar singleton si almacenas información. un saludo.
No se si es muy tarde para consultar lo siguiente, porque en Stackoverflow se recomienda solo utilizar Singleton para uso de estilo Logger y no usandolo por ejemplo para un servicio de Registro de Cliente por ejemplo. Si muchos usuarios utilizan un patron singleton de unica instancia puede ocacionar algun tipo de problema??, porque se recomienda utilizar Transient si por el otro lado te come gran parte de la memoria? Agradecería si alguien me lo aclarara.Gracias.
Hola, para saber si utilizar singleton, scoped o transient debes de saber que es lo que va a hacer tu aplicación o lo que va a hacer el servicio que vas a proporcionar. Respecto a lo del log, es raro que recomienden utilzar singleton para el log la verdad, yo personalmente siempre lo hago scoped ya que al log le pongo una propiedad llamada "coorelationID" la cual es única para la request (y la voy pasando entre los diferentes microservicios) y esto me permite en caso de que algo salga mal, localizar todo el trace del código. Por este motivo principalmente me sorpende que realicen singleton, ya que esto no se puede hacer. el caso de registro de cliente, tambien lo haria scoped, osea unico para la request, no veo ningún beneficio en hacerlo singleton, sin embargo un servicio de caché en memoria sí lo haría singleton. Para transient lo mismo, depende lo que quieras hacer, te puede servir o no, sobre el papel transient y singleton en muchos escenarios puede ser igual pero por ejemplo el vídeo que he subdo hoy toca este tema, cuando utilzas httpclient si lo haces como singleton, todo va bien, todo funciona, pero si lo haces como transient cada vez que invocas httpclient este crea un socket y a la larga te quedas sin sockets y el codigo no funciona como esperabas. Y sobre el uso de muchos usuarios no, no deberia haber ningún problema, siempre y cuando la instancia singleton no contenga información que modificar ya que podrias tener dos usuarios intentando registrar en la misma posición. respecto a la memoria pues depende, singleton "consume" mas ya que guarda siempre esa instancia en memoria, incluso cuando no se utilzia, pero si en algún momento tienes 10000 usuarios accediendo a la misma instacia, eso quiere decir que tienes que instanciar 10000 veces el servicio (y sus dependencias) en ese pico , transient es peor. cualquier otra duda me dices, un saludo.
tengo una app que es un worker el cual consume mensajes de rabbitmq y los persiste con dbcontext. Cómo debería inyectar el context y los servicios en el worker para que no me de error de que varios hilos intentan acceder al mismo dbcontext? Esto me sucede al intanciar el consumer cuando quiere persistir el msj de rabbit en la bd
@@NetMentor ya lo resolví, no estaba usando correctamente la forma de consumer asíncrono de rabbitmq. Usando AsyncEventingBasicConsumer en vez de EventingBasicConsumer, y configurando el ConnectionFactory con la propiedad DispatchConsumersAsync en true
recomendacion no abusen de la inyeccion de dependecias, solo injecten los servicios que son externos a su applicacion como base de datos, email por ejemplo.
vas a tener que desarrollar tu opinion porque yo estoy completamente en contra de esto que comentas; cuanto mas puedas inyectar mas fácil de desarrollar, de testear y de mantener.
Amigo revisa tu metodología necesitas ser mas claro y preciso con los conceptos por que no te entendí bien la inyección de dependencia vas muy rápido y los conceptos y explicaciones son muy débiles
Lamento que no fuera lo suficientemente claro :( Si el problema es la velocidad, en en el comentario fijado tienes en enlace al blog donde esta todo explicado así como el código disponible para descargar, un saludo.
twitter: twitter.com/NetMentorTW
Blog: www.netmentor.es/Entrada/inyeccion-dependencias-scoped-transient-singleton
Gracias por compartir, me fue de mucha ayuda para implementar la inyección en un proyecto de consola
Es el tercer video que veo de esto porque me estaba costando entenderlo, este fue el más claro y preciso.
el mejor de todos los videos que encontré que hablan del tema
Amigo, me entristece 350 visualizaciones, para temas con tanto contenido, no te desanimes, acabo de bajar el ejemplo para adjuntarlo a un proyecto del trabajo que tengo que entregar.
es que la mayoria quiere algo tipo....Crea una appweb completa!..Crea una web con framework YYY
Este es de lejos, la mejor explicación respecto a ciclo de vida e inyección de dependencias!, genial capo! un grande!
Excelente!! estoy usando inyección de dependencias en mis apis :p
La mejor explicacion que he visto de DI! Gracias!
Excelente!, Nunca había visto una explicación tan clara y sencilla como esta
Muchas gracias por la info me ha ayudado mucho en lo profecional
Me haz ayudado un monton a entender el tema, con un poco de práctica seguro lo domino. Gracias
Muchisimas gracias. Me lo habían explicado antes pero a mi no me quedaba del todo claro. Con tu video lo entendí a la perfección.
Super bien explicado, muchas gracias.
Justo lo que buscaba muy claro y conciso, muchas gracias
Muy buena explicación.
Justo lo que buscaba, muchas gracias, me quedó claro la diferencia entre cada una.
Crack, explicas muy bien.
Excelente material, muchas gracias !!!
Soy tu fan numero 1 Tigre
muy util y sencillo
Que bien explicado!! Gracias
crack de cracks, la entendi en una
Excelente explicación
Gracias :D
Hola, podría implementar un contenedor de dependencias en .net framework clásico? Por ejemplo con el 4.8. Un saludo y q sepas q cada vez soy más fan de tu canal
Si claro, puedes utilizar autofact o ninject, autofact es mejor en términos de rendimiento
Excelente video amigo.
Muy bueno!!!!
Gracias!!
buenas tardes, cual es el curso en el que se desarrolla esa solución que sirve para explicar el video? Gracias.
Hola buenas el curso es este
www.netmentor.es/Curso/programacion-web-csharp
el problema es que por temas personales no puedo dedicarle todo el tiempo que me gustaría al canal/web y solo tengo un post mas después de este :(
@@NetMentor puedo ver en tu canal/web que tienes muy buen material, con buenas guias y consejos. En mi opinión la publicación de contenido no tiene que ser todos los dias o semanas, con que se vea actividad cada x tiempo la gente seguirá visitando tus post. Algo que es muy importante es que ese contenido sea de calidad y no darle tanta prioridad a la cantidad, como lo has venido haciendo hasta ahora me parece bien. Saludos
Gracias x la informacion. Solo una pregunta, consideras scope como el mejor de los tres, saludoa desde Panama.
Hola!
Cuando determinas qué tiempo de vida vas a utilzar no tenemos uno "mejor o peor" por defecto, sino que debes utilizar uno en base al caso de uso.
Poniendonos en el entorno de una aplicación web:
Si tienes un sistmema cache en memoria tendrías que utilziar singleton para que esa cache fuera a todas las request y usuarios, ya que con scoped únicamente sería válida para esa request. Otro caso de uso común es por ejemplo la configuración de la aplicación.
Los controladores suelen ser scoped, esto se hace por múltiples razones, una de ellas es, si tienes un sistema de logs y quieres guardar un "trace" de por donde va el cóidigo, insancias el "correlationid" junto con la llamada, al ser scoped el mismo ID se mantiene en toda la request (y por lo tanto todos los logs). La idea de scoped es mantener el state de la request, depende del caso obviamente.
Transient es el caso de uso mas raro, personalmente en el mundo web, únicamente los he neceistado cuando he creado backgroundworkers, pero sí son "raros" de utilizar. otro ejempo es cuando tienes un componente que no debe ser comparitdo, imaginate que tienes un servicio que crea algo de forma aleatoria, pues con transciente seria siempre diferente, no se si me explico.
Espero que te sirva la explicación.
un saludo!
@@NetMentor muchas gracias por la explicacion y tu tiempo. Saludos
Hola, una consulta, en WPF cual seria el scope? Trabajo con MVVM. Gracias
Hace mucho (desde .net framework) que no toco wpf pero todo depende un poco de lo que queiras hacer. Pero en resumidas cuentas, singleton para todo lo que quieras mantener abierto/en memoria y transient para el resto.
Scoped no tiene mucho sntido en wpf porque no compartes la aplicación entre múltiples clients (osea diferentes requests)
un saludo
@@NetMentor gracias por la respuesta, por las dudas tienes algún video sobre usar factory con el DbContext? gracias
No, no tengo ningún vídeo del estilo :(
tengo una duda, yo use en una aplicación multiuser addsingleton y me comentaron que podria ocasionar conflictos entre usuarios viendo tu video entiendo que perfectamente lo que hace pero por ejemplo en servicios que ejecutan get a bases de datos, insert, select etc. crees que podrian generar conflicto ¿ seria mejor usar addscope? gracias por tu respuesta
para ese caso en concreto, no generarías conflicto, pero, mejor si utilzas scope o transient en caso de que en el futuro incluyas algo (aunque no creo) que pueda generar conflicto, royo el ID de la request en un log, etc.
Un saludo!
@@NetMentor gracias por responder me has aclarado el tema un saludo
Para registrar conexiones a BD qué tipo de lifecycle recomiendan?
Normalmente scoped, que es el que viene por defecto
cuando son interfaces que implementan operaciones curd? es mejor poner transient o singletone?
Hola! pues depende un poco de lo que hagas en dichas implementaciones.
Lo mas normal es definir los servicios que van a ejecutar la lógica como scoped, ya que estos van a ser ejecutados una vez por request.
Pero, depende de lo que vayas inyectando para utilizar.
Por ejemplo, si tienes un sistema de caché en memoria, ese sitema de caché deberá ser singleton, mientras que si tienes un sistema de caché en redis, puedes implementarlo transient.
o por ejemplo la base de datos, si solo haces una query, puedes hacerlo tanto transient, como singleton como scoped, mientras que si haces mas de una es recomendable no hacerlo transient, porque instanciarias más de una vez dicho servicio para acceder a la base de datos.
Luego si almacenas infroamción en un servicio singleton esta información esta común para todas las request, así que cuidado con utilziar singleton si almacenas información.
un saludo.
Excelente contenido. ¡Saludos!
Gracias!
No se si es muy tarde para consultar lo siguiente, porque en Stackoverflow se recomienda solo utilizar Singleton para uso de estilo Logger y no usandolo por ejemplo para un servicio de Registro de Cliente por ejemplo. Si muchos usuarios utilizan un patron singleton de unica instancia puede ocacionar algun tipo de problema??, porque se recomienda utilizar Transient si por el otro lado te come gran parte de la memoria? Agradecería si alguien me lo aclarara.Gracias.
Hola, para saber si utilizar singleton, scoped o transient debes de saber que es lo que va a hacer tu aplicación o lo que va a hacer el servicio que vas a proporcionar.
Respecto a lo del log, es raro que recomienden utilzar singleton para el log la verdad, yo personalmente siempre lo hago scoped ya que al log le pongo una propiedad llamada "coorelationID" la cual es única para la request (y la voy pasando entre los diferentes microservicios) y esto me permite en caso de que algo salga mal, localizar todo el trace del código. Por este motivo principalmente me sorpende que realicen singleton, ya que esto no se puede hacer.
el caso de registro de cliente, tambien lo haria scoped, osea unico para la request, no veo ningún beneficio en hacerlo singleton, sin embargo un servicio de caché en memoria sí lo haría singleton.
Para transient lo mismo, depende lo que quieras hacer, te puede servir o no, sobre el papel transient y singleton en muchos escenarios puede ser igual pero por ejemplo el vídeo que he subdo hoy toca este tema, cuando utilzas httpclient si lo haces como singleton, todo va bien, todo funciona, pero si lo haces como transient cada vez que invocas httpclient este crea un socket y a la larga te quedas sin sockets y el codigo no funciona como esperabas.
Y sobre el uso de muchos usuarios no, no deberia haber ningún problema, siempre y cuando la instancia singleton no contenga información que modificar ya que podrias tener dos usuarios intentando registrar en la misma posición.
respecto a la memoria pues depende, singleton "consume" mas ya que guarda siempre esa instancia en memoria, incluso cuando no se utilzia, pero si en algún momento tienes 10000 usuarios accediendo a la misma instacia, eso quiere decir que tienes que instanciar 10000 veces el servicio (y sus dependencias) en ese pico , transient es peor.
cualquier otra duda me dices, un saludo.
@@NetMentor Muchas gracias por tu respuesta, voy a ver el video que has subido para que me quede mas claro aun.
Buenísimo!!! 🔥❤️
Seria bueno que señale en la explicacion
tengo una app que es un worker el cual consume mensajes de rabbitmq y los persiste con dbcontext. Cómo debería inyectar el context y los servicios en el worker para que no me de error de que varios hilos intentan acceder al mismo dbcontext? Esto me sucede al intanciar el consumer cuando quiere persistir el msj de rabbit en la bd
sin mas info ni idea, pero a no ser uqe hagas algo raro, no debería darte ese problema.
Yo por norma general, la bbdd scoped.
@@NetMentor ya lo resolví, no estaba usando correctamente la forma de consumer asíncrono de rabbitmq. Usando AsyncEventingBasicConsumer en vez de EventingBasicConsumer, y configurando el ConnectionFactory con la propiedad DispatchConsumersAsync en true
recomendacion no abusen de la inyeccion de dependecias, solo injecten los servicios que son externos a su applicacion como base de datos, email por ejemplo.
vas a tener que desarrollar tu opinion porque yo estoy completamente en contra de esto que comentas; cuanto mas puedas inyectar mas fácil de desarrollar, de testear y de mantener.
3.14K de subs !? Me parece una falta de respeto a tremendo talento
haha debería hacer spam por los foros 👀
Vas muy rápido, nó se entiende.
Amigo revisa tu metodología necesitas ser mas claro y preciso con los conceptos por que no te entendí bien la inyección de dependencia vas muy rápido y los conceptos y explicaciones son muy débiles
Lamento que no fuera lo suficientemente claro :(
Si el problema es la velocidad, en en el comentario fijado tienes en enlace al blog donde esta todo explicado así como el código disponible para descargar, un saludo.
parás el video y volvés a ver lo que te pareció que pasó rapido
Excelente ejemplo. Muchas gracias.