{"id":1916,"date":"2023-11-22T14:12:16","date_gmt":"2023-11-22T17:12:16","guid":{"rendered":"https:\/\/stackcodelab.com\/blog\/?p=1916"},"modified":"2023-12-03T10:53:52","modified_gmt":"2023-12-03T13:53:52","slug":"inyeccion-de-dependencias-en-c","status":"publish","type":"post","link":"https:\/\/stackcodelab.com\/blog\/inyeccion-de-dependencias-en-c\/","title":{"rendered":"Inyecci\u00f3n de Dependencias en C#"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La inyecci\u00f3n de dependencias (IoC &#8211; Inversion of Control) es un patr\u00f3n de dise\u00f1o utilizado en C# y otros lenguajes de programaci\u00f3n para gestionar las dependencias de objetos en una aplicaci\u00f3n. En C#, puedes implementar IoC utilizando contenedores de IoC como Unity, Autofac, Ninject, y otros. A continuaci\u00f3n, te mostrar\u00e9 un ejemplo simple de inyecci\u00f3n de dependencias utilizando Autofac como contenedor de IoC:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agrega Autofac a tu proyecto. Puedes hacerlo instalando el paquete NuGet correspondiente:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install-Package Autofac<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea una interfaz y una clase que implemente esa interfaz. En este ejemplo, crearemos una interfaz <code>ISaludoService<\/code> y una clase <code>SaludoService<\/code> que implementa la interfaz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface ISaludoService\n{\n    string Saludar(string nombre);\n}\n\npublic class SaludoService : ISaludoService\n{\n    public string Saludar(string nombre)\n    {\n        return $\"\u00a1Hola, {nombre}!\";\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Configura Autofac para gestionar la inyecci\u00f3n de dependencias en tu aplicaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Autofac;\n\nclass Program\n{\n    static void Main()\n    {\n        \/\/ Crea un contenedor Autofac\n        var builder = new ContainerBuilder();\n\n        \/\/ Registra tus componentes y servicios en el contenedor\n        builder.RegisterType&lt;SaludoService&gt;().As&lt;ISaludoService&gt;();\n\n        \/\/ Construye el contenedor\n        var container = builder.Build();\n\n        \/\/ Resuelve las dependencias utilizando Autofac\n        using (var scope = container.BeginLifetimeScope())\n        {\n            var saludoService = scope.Resolve&lt;ISaludoService&gt;();\n            var mensaje = saludoService.Saludar(\"John\");\n            Console.WriteLine(mensaje);\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos un contenedor Autofac utilizand <code>ContainerBuilder<\/code>.<\/li>\n\n\n\n<li>Registramos <code>SaludoService <\/code>como implementaci\u00f3n de <code>ISaludoService<\/code> en el contenedor.<\/li>\n\n\n\n<li>Construimos el contenedor utilizando <code>Build()<\/code>.<\/li>\n\n\n\n<li>Resolvemos las dependencias utilizando el contenedor en un \u00e1mbito (<code>scope<\/code>) y luego llamamos al m\u00e9todo <code>Saludar <\/code>de <code>SaludoService<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La inyecci\u00f3n de dependencias permite que los componentes de tu aplicaci\u00f3n obtengan sus dependencias de manera autom\u00e1tica, lo que facilita la creaci\u00f3n de aplicaciones m\u00e1s flexibles y mantenibles. Puedes configurar m\u00e1s componentes y servicios en el contenedor seg\u00fan tus necesidades espec\u00edficas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Implementaci\u00f3n de inyecci\u00f3n de dependencias en una aplicaci\u00f3n web MVC.<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La implementaci\u00f3n de la inyecci\u00f3n de dependencias en una aplicaci\u00f3n web MVC en C# es similar a la que se mostr\u00f3 en el ejemplo anterior, pero adaptada al entorno web. A continuaci\u00f3n, te mostrar\u00e9 c\u00f3mo hacerlo utilizando ASP.NET MVC y Autofac como contenedor de IoC.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Crea un proyecto de aplicaci\u00f3n web ASP.NET MVC si a\u00fan no tienes uno configurado.<\/li>\n\n\n\n<li>Agrega Autofac a tu proyecto web. Puedes hacerlo instalando el paquete NuGet correspondiente:<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install-Package Autofac.Mvc5<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define una interfaz y una clase que implemente esa interfaz, similar al ejemplo anterior. Por ejemplo, crearemos una interfaz <code>ISaludoService<\/code> y una clase <code>SaludoService<\/code> que implementa la interfaz:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface ISaludoService\n{\n    string Saludar(string nombre);\n}\n\npublic class SaludoService : ISaludoService\n{\n    public string Saludar(string nombre)\n    {\n        return $\"\u00a1Hola, {nombre}!\";\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Configura Autofac para gestionar la inyecci\u00f3n de dependencias en tu aplicaci\u00f3n web. Para ello, puedes utilizar la clase <code>AutofacConfig<\/code> dentro de la carpeta <code>App_Start<\/code> en tu proyecto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System.Web.Mvc;\nusing Autofac;\nusing Autofac.Integration.Mvc;\n\npublic class AutofacConfig\n{\n    public static void RegisterDependencies()\n    {\n        var builder = new ContainerBuilder();\n\n        \/\/ Registra tus componentes y servicios en el contenedor\n        builder.RegisterType&lt;SaludoService&gt;().As&lt;ISaludoService&gt;();\n\n        \/\/ Registra los controladores de MVC en Autofac\n        builder.RegisterControllers(typeof(MvcApplication).Assembly);\n\n        \/\/ Construye el contenedor\n        var container = builder.Build();\n\n        \/\/ Configura MVC para usar Autofac como su contenedor de IoC\n        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Llama al m\u00e9todo <code>RegisterDependencies<\/code> en el archivo <code>Global.asax.cs <\/code>dentro de la carpeta <code>App_Start<\/code> en el m\u00e9todo <code>Application_Start<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>protected void Application_Start()\n{\n    AreaRegistration.RegisterAllAreas();\n    RouteConfig.RegisterRoutes(RouteTable.Routes);\n    AutofacConfig.RegisterDependencies(); \/\/ Registra las dependencias con Autofac\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora, puedes utilizar la inyecci\u00f3n de dependencias en tus controladores de ASP.NET MVC. Por ejemplo, inyecta <code>ISaludoService <\/code>en tu controlador:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class HomeController : Controller\n{\n    private readonly ISaludoService _saludoService;\n\n    public HomeController(ISaludoService saludoService)\n    {\n        _saludoService = saludoService;\n    }\n\n    public ActionResult Index()\n    {\n        var mensaje = _saludoService.Saludar(\"John\");\n        ViewBag.Mensaje = mensaje;\n        return View();\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, el controlador <code>HomeController<\/code> recibe una instancia de <code>ISaludoService<\/code> a trav\u00e9s de la inyecci\u00f3n de dependencias. Puedes utilizar <code>ISaludoService<\/code> en tus acciones para realizar operaciones y mostrar datos en tus vistas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La inyecci\u00f3n de dependencias en ASP.NET MVC facilita la gesti\u00f3n de las dependencias de tus controladores y otros componentes de la aplicaci\u00f3n, lo que la hace m\u00e1s flexible y mantenible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La inyecci\u00f3n de dependencias (IoC &#8211; Inversion of Control) es un patr\u00f3n de dise\u00f1o utilizado en C# y otros lenguajes de programaci\u00f3n para gestionar las dependencias de objetos en una aplicaci\u00f3n. En C#, puedes implementar IoC utilizando contenedores de IoC como Unity, Autofac, Ninject, y otros. A continuaci\u00f3n, te mostrar\u00e9 un ejemplo simple de inyecci\u00f3n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[34],"tags":[],"class_list":["post-1916","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-y-otras-hierbas"],"uagb_featured_image_src":{"full":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C.jpg",1000,666,false],"thumbnail":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C-150x150.jpg",150,150,true],"medium":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C-300x200.jpg",300,200,true],"medium_large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C-768x511.jpg",768,511,true],"large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C.jpg",1000,666,false],"1536x1536":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C.jpg",1000,666,false],"2048x2048":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Inyeccion-de-Dependencias-en-C.jpg",1000,666,false]},"uagb_author_info":{"display_name":"arquitecto","author_link":"https:\/\/stackcodelab.com\/blog\/author\/arquitecto\/"},"uagb_comment_info":0,"uagb_excerpt":"La inyecci\u00f3n de dependencias (IoC &#8211; Inversion of Control) es un patr\u00f3n de dise\u00f1o utilizado en C# y otros lenguajes de programaci\u00f3n para gestionar las dependencias de objetos en una aplicaci\u00f3n. En C#, puedes implementar IoC utilizando contenedores de IoC como Unity, Autofac, Ninject, y otros. A continuaci\u00f3n, te mostrar\u00e9 un ejemplo simple de inyecci\u00f3n&hellip;","_links":{"self":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/comments?post=1916"}],"version-history":[{"count":2,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1916\/revisions"}],"predecessor-version":[{"id":2089,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1916\/revisions\/2089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media\/2088"}],"wp:attachment":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media?parent=1916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/categories?post=1916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/tags?post=1916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}