{"id":4005,"date":"2017-09-08T11:51:32","date_gmt":"2017-09-08T18:51:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4005"},"modified":"2025-06-13T19:40:26","modified_gmt":"2025-06-14T02:40:26","slug":"dependency-injection-aspnet-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/","title":{"rendered":"Inyecci\u00f3n de dependencias con ASP.NET Core y Couchbase"},"content":{"rendered":"<div class=\"paragraph\">\n<p>La inyecci\u00f3n de dependencias es un patr\u00f3n de dise\u00f1o que facilita la programaci\u00f3n. Le ahorra la molestia de instanciar objetos con dependencias complejas y le facilita la escritura de pruebas. Con la <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">Biblioteca Couchbase.Extensions.DependencyInjection (GitHub)<\/a>Con ASP.NET Core, puede utilizar cl\u00fasteres y buckets de Couchbase en el marco de inyecci\u00f3n de dependencias de ASP.NET Core.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En mi \u00faltima entrada sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/distributed-caching-aspnet-couchbase\/\">cach\u00e9 distribuida con ASP.NET<\/a>mencion\u00e9 la librer\u00eda DependencyInjection. La inyecci\u00f3n de dependencia ser\u00e1 explorada en profundidad en este post. Si\u00e9ntete libre de seguir los ejemplos de c\u00f3digo que he creado, disponibles en <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/078AspNetCoreDependencyInjection\/src\/CouchbaseDIExample\">GitHub<\/a>.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_basic_setup_of_couchbase\">Configuraci\u00f3n b\u00e1sica de Couchbase<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En primer lugar, necesitar\u00e1s un cl\u00faster de Couchbase Server en funcionamiento. Puedes hacerlo:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Instalarlo <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/install\/install-intro.html\">en las instalaciones<\/a><\/li>\n<li>Ejecutar en un contenedor <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/getting-started\/do-a-quick-install.html\">con Docker<\/a><\/li>\n<li>Utilice un servicio en la nube como <a href=\"https:\/\/azuremarketplace.microsoft.com\/en-us\/marketplace\/apps\/couchbase.couchbase-enterprise\">Azure<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, deber\u00e1 <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-buckets\/create-bucket.html\">crear un cubo<\/a> en Couchbase. Puede ser el bucket \"travel-sample\" que viene con Couchbase, o un bucket que crees t\u00fa mismo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Si est\u00e1s usando Couchbase Server 5.0, tambi\u00e9n necesitar\u00e1s crear un usuario. Dale a ese usuario permiso de Cluster Admin, y dale el mismo nombre que al bucket, solo para mantener las cosas simples si est\u00e1s siguiendo el proceso.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_dependency_injection_with_couchbase_extensions\">Inyecci\u00f3n de dependencia con Couchbase.Extensions<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\">Couchbase.Extensions (GitHub)<\/a> tiene como objetivo simplificar el trabajo con Couchbase Server y ASP.NET Core. Dependency Injection es solo una de estas extensiones.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede a\u00f1adirlo a su proyecto ASP.NET Core con NuGet:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Mediante el Gestor de paquetes: <code>Install-Package Couchbase.Extensions.DependencyInjection -Versi\u00f3n 1.0.2<\/code><\/li>\n<li>Con la interfaz de usuario de NuGet<\/li>\n<li>Utilice la l\u00ednea de comandos .NET: <code>dotnet add package Couchbase.Extensions.DependencyInjection --version 1.0.2<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><em>(La versi\u00f3n 1.0.2 es la m\u00e1s reciente en el momento de redactar este documento).<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/09\/07801-nuget-couchbase-extension-dependency-injection.png\" alt=\"Couchbase extension for dependency injection on NuGet\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, tendr\u00e1 que hacer cambios en su <code>Puesta en marcha<\/code> clase en <code>Inicio.cs<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En la entrada del blog sobre el almacenamiento en cach\u00e9, codifiqu\u00e9 la configuraci\u00f3n:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddCouchbase(client =&gt;\r\n{\r\n    client.Servers = new List&lt;Uri&gt; { new Uri(\"https:\/\/localhost:8091\")};\r\n    client.UseSsl = false;\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto est\u00e1 bien para demostraciones y entradas de blog, pero es probable que desee utilizar un archivo de configuraci\u00f3n para un proyecto de producci\u00f3n.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddCouchbase(Configuration.GetSection(\"Couchbase\"));<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Suponiendo que est\u00e9 utilizando la opci\u00f3n por defecto <code>appsettings.json<\/code>actualice ese archivo para a\u00f1adir una secci\u00f3n Couchbase:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">\"Couchbase\" : {\r\n  \"Servers\": [\r\n    \"https:\/\/localhost:8091\"\r\n  ],\r\n  \"UseSsl\": false\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Haciendo una secci\u00f3n \"Couchbase\", el m\u00f3dulo de inyecci\u00f3n de dependencias leer\u00e1 directamente del fichero de texto appsettings.json.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_constructor_injection\">Inyecci\u00f3n de constructores<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Una vez configurada la inyecci\u00f3n de dependencias, puedes empezar a inyectar objetos \u00fatiles en tus clases. Podr\u00edas inyectarlos en Controladores, servicios o repositorios.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>He aqu\u00ed un ejemplo de inyecci\u00f3n en <code>InicioControlador<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class HomeController : Controller\r\n{\r\n    private readonly IBucket _bucket;\r\n\r\n    public HomeController(IBucketProvider bucketProvider)\r\n    {\r\n        _bucket = bucketProvider.GetBucket(\"travel-sample\", \"password\");\r\n    }\r\n\r\n    \/\/ ... snip ...\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, hagamos un simple <code>Visite<\/code> sobre un documento conocido en \"travel-sample\". Este uso simb\u00f3lico del SDK .NET de Couchbase mostrar\u00e1 la inyecci\u00f3n de dependencias en acci\u00f3n. Har\u00e9 un cambio en el <code>Acerca de<\/code> m\u00e9todo de acci\u00f3n. En ese m\u00e9todo, recuperar\u00e1 un documento de ruta y escribir\u00e1 el n\u00famero de equipo.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public IActionResult About()\r\n{\r\n    \/\/ get the route document for Columbus to Chicago (United)\r\n    var route = _bucket.Get&lt;dynamic&gt;(\"route_56027\").Value;\r\n\r\n    \/\/ display the equipment number of the route\r\n    ViewData[\"Message\"] = \"CMH to ORD - \" + route.equipment;\r\n\r\n    return View();\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Y el resultado es:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/09\/07802-travel-sample-result.png\" alt=\"Travel sample output of a single route\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u00c9xito. La inyecci\u00f3n de dependencia ha funcionado, y estamos listos para usar un bucket de Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Si no utiliza \"muestra-viaje\", utilice una clave de su propio cubo.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_named_buckets\">Cubos con nombre<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Puede utilizar la inyecci\u00f3n de dependencias para un \u00fanico cubo en lugar de tener que especificar el nombre cada vez.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Empiece por crear una interfaz que implemente <code>INamedBucketProvider<\/code>. D\u00e9jelo vac\u00edo. He aqu\u00ed un ejemplo:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public interface ITravelSampleBucketProvider : INamedBucketProvider\r\n{\r\n    \/\/ nothing goes in here!\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, en Startup.cs, asigna esta interfaz a un cubo utilizando <code>AddCouchbaseBucket<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services\r\n    .AddCouchbase(Configuration.GetSection(\"Couchbase\"))\r\n    .AddCouchbaseBucket&lt;ITravelSampleBucketProvider&gt;(\"travel-sample\", \"password\");<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Ahora, el <code>ITravelSampleBucketProvider<\/code> en lugar del proveedor general.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public HomeController(ITravelSampleBucketProvider travelBucketProvider)\r\n{\r\n    _bucket = travelBucketProvider.GetBucket();\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_more_complex_dependency_injection\">Inyecci\u00f3n de dependencias m\u00e1s compleja<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Hasta este punto, s\u00f3lo hemos utilizado la inyecci\u00f3n de dependencia en los controladores. La inyecci\u00f3n de dependencia comienza a pagar dividendos con gr\u00e1ficos de objetos m\u00e1s complejos y profundos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como ejemplo, imagina una clase de servicio que utiliza un bucket de Couchbase, pero tambi\u00e9n utiliza un servicio de correo electr\u00f3nico.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class ComplexService : IComplexService\r\n{\r\n    private readonly IBucket _bucket;\r\n    private readonly IEmailService _email;\r\n\r\n    public ComplexService(ITravelSampleBucketProvider bucketProvider, IEmailService emailService)\r\n    {\r\n        _bucket = bucketProvider.GetBucket();\r\n        _email = emailService;\r\n    }\r\n\r\n    public void ApproveApplication(string emailAddress)\r\n    {\r\n        _bucket.Upsert(emailAddress, new {emailAddress, approved = true});\r\n        _email.SendEmail(emailAddress, \"Approved\", \"Your application has been approved!\");\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, vamos a utilizar este servicio en un controlador (es decir, convirti\u00e9ndolo en una dependencia). Pero ten en cuenta que el controlador no utiliza directamente ni el cubo ni el servicio de correo electr\u00f3nico.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class ApproveController : Controller\r\n{\r\n    private readonly IComplexService _svc;\r\n\r\n    public ApproveController(IComplexService svc)\r\n    {\r\n        _svc = svc;\r\n    }\r\n\r\n    public IActionResult Index()\r\n    {\r\n        var fakeEmailAddress = Faker.Internet.Email();\r\n        _svc.ApproveApplication(fakeEmailAddress);\r\n        ViewData[\"Message\"] = \"Approved '\" + fakeEmailAddress + \"'\";\r\n        return View();\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tuviera que instanciar <code>ServicioComplejo<\/code> manualmente, tendr\u00eda que instanciar al menos otros dos objetos. Ser\u00eda algo como: <code>new ComplexService(new BucketProvider(), new MyEmailService()<\/code>. Son muchas cosas de las que tengo que hacer un seguimiento, y si cambia alguna dependencia, es mucho mantenimiento manual.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En su lugar, puedo hacer que ASP.NET Core utilice la inyecci\u00f3n de dependencias para hacer todo esto por m\u00ed. De vuelta en <code>Puesta en marcha<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddTransient&lt;IEmailService, MyEmailService&gt;();\r\nservices.AddTransient&lt;IComplexService, ComplexService&gt;();<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Ahora, ASP.NET Core sabe c\u00f3mo instanciar:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>ITravelSampleBucketProvider<\/code>gracias a Couchbase.Extensions.DependencyInjection<\/li>\n<li><code>IEmailService<\/code> - Le dije que usara <code>MyEmailService<\/code><\/li>\n<li><code>IComplexService<\/code> - Le dije que usara <code>ServicioComplejo<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Por \u00faltimo, cuando <code>AprobarControlador<\/code> ASP.NET Core sabr\u00e1 c\u00f3mo hacerlo. Crear\u00e1 <code>ServicioComplejo<\/code> instanciando <code>MyEmailService<\/code> y <code>ServicioComplejo<\/code>. Inyectar\u00e1 <code>ServicioComplejo<\/code> autom\u00e1ticamente en el constructor de `ApproveController. El resultado final:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/09\/07803-complex-service-in-action.png\" alt=\"Complex service in action using dependency injection\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para ver el ejemplo completo, consulte la p\u00e1gina <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/078AspNetCoreDependencyInjection\/src\/CouchbaseDIExample\">c\u00f3digo fuente que acompa\u00f1a a esta entrada de blog en GitHub<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_cleaning_up\">Limpieza<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>No olvides limpiar despu\u00e9s. Cuando la aplicaci\u00f3n ASP.NET Core se detenga, libera cualquier recurso que el SDK .NET de Couchbase est\u00e9 utilizando. En el <code>Configure<\/code> en Startup, a\u00f1ada un par\u00e1metro de tipo <code>IApplicationLifetime<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Dentro de ese <code>Configure<\/code> configure un m\u00e9todo <code>Aplicaci\u00f3nParada<\/code> evento:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">applicationLifetime.ApplicationStopped.Register(() =&gt;\r\n{\r\n    app.ApplicationServices.GetRequiredService&lt;ICouchbaseLifetimeService&gt;().Close();\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La inyecci\u00f3n de dependencia es un tema muy rico. Se han escrito libros enteros sobre ella y sus beneficios para tu aplicaci\u00f3n. Esta entrada de blog apenas ara\u00f1a la superficie y ni siquiera cubre los beneficios de la testabilidad.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase.Extensions.DependencyInjection facilita la inyecci\u00f3n de Couchbase en ASP.NET Core.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tiene preguntas o comentarios, no deje de consultar el <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">Repositorio GitHub<\/a> o el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/c\/net-sdk\/\">Foros del SDK .NET de Couchbase<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tiene alguna pregunta, d\u00e9jeme un comentario a continuaci\u00f3n o p\u00f3ngase en contacto conmigo en <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Dependency Injection is a design pattern that makes coding easier. It saves you the hassle of instantiating objects with complex dependencies, and it makes it easier for you to write tests. With the Couchbase.Extensions.DependencyInjection library (GitHub), you can use Couchbase [&hellip;]<\/p>","protected":false},"author":71,"featured_media":4006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1814,10126,1815,1816],"tags":[2052],"ppma_author":[8937],"class_list":["post-4005","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-application-design","category-asp-dotnet","category-best-practices-and-tutorials","category-couchbase-server","tag-extensions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dependency Injection Framework with ASP.NET Core + Couchbase<\/title>\n<meta name=\"description\" content=\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\" \/>\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.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependency Injection with ASP.NET Core and Couchbase\" \/>\n<meta property=\"og:description\" content=\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-08T18:51:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:40:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"532\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Dependency Injection with ASP.NET Core and Couchbase\",\"datePublished\":\"2017-09-08T18:51:32+00:00\",\"dateModified\":\"2025-06-14T02:40:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"},\"wordCount\":849,\"commentCount\":12,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"keywords\":[\"extensions\"],\"articleSection\":[\".NET\",\"Application Design\",\"ASP.NET\",\"Best Practices and Tutorials\",\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\",\"name\":\"Dependency Injection Framework with ASP.NET Core + Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"datePublished\":\"2017-09-08T18:51:32+00:00\",\"dateModified\":\"2025-06-14T02:40:26+00:00\",\"description\":\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"width\":800,\"height\":532,\"caption\":\"Dependency injection\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dependency Injection with ASP.NET Core and Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dependency Injection Framework with ASP.NET Core + Couchbase","description":"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.","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.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"Dependency Injection with ASP.NET Core and Couchbase","og_description":"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-09-08T18:51:32+00:00","article_modified_time":"2025-06-14T02:40:26+00:00","og_image":[{"width":800,"height":532,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Dependency Injection with ASP.NET Core and Couchbase","datePublished":"2017-09-08T18:51:32+00:00","dateModified":"2025-06-14T02:40:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"},"wordCount":849,"commentCount":12,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","keywords":["extensions"],"articleSection":[".NET","Application Design","ASP.NET","Best Practices and Tutorials","Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/","name":"Dependency Injection Framework with ASP.NET Core + Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","datePublished":"2017-09-08T18:51:32+00:00","dateModified":"2025-06-14T02:40:26+00:00","description":"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","width":800,"height":532,"caption":"Dependency injection"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dependency Injection with ASP.NET Core and Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4005"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4005\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/4006"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4005"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}