{"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\/pt\/dependency-injection-aspnet-couchbase\/","title":{"rendered":"Inje\u00e7\u00e3o de depend\u00eancia com ASP.NET Core e Couchbase"},"content":{"rendered":"<div class=\"paragraph\">\n<p>A inje\u00e7\u00e3o de depend\u00eancia \u00e9 um padr\u00e3o de design que facilita a codifica\u00e7\u00e3o. Ele evita o inc\u00f4modo de instanciar objetos com depend\u00eancias complexas e facilita a cria\u00e7\u00e3o de testes. Com a <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">Biblioteca Couchbase.Extensions.DependencyInjection (GitHub)<\/a>Se voc\u00ea n\u00e3o tiver um plano de neg\u00f3cios, poder\u00e1 usar clusters e buckets do Couchbase na estrutura de inje\u00e7\u00e3o de depend\u00eancia do ASP.NET Core.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em minha \u00faltima postagem no blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/distributed-caching-aspnet-couchbase\/\">Cache distribu\u00eddo com ASP.NET<\/a>Na postagem anterior, mencionei a biblioteca DependencyInjection. A inje\u00e7\u00e3o de depend\u00eancia ser\u00e1 explorada em detalhes nesta postagem. Fique \u00e0 vontade para acompanhar os exemplos de c\u00f3digo que criei, dispon\u00edveis em <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\">Configura\u00e7\u00e3o b\u00e1sica do Couchbase<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Primeiro, voc\u00ea precisar\u00e1 de um cluster do Couchbase Server em execu\u00e7\u00e3o. Voc\u00ea pode:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Instale-o <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/install\/install-intro.html\">no local<\/a><\/li>\n<li>Executar em um cont\u00eainer <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/getting-started\/do-a-quick-install.html\">com o Docker<\/a><\/li>\n<li>Use um servi\u00e7o de nuvem 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>Em seguida, voc\u00ea precisar\u00e1 <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-buckets\/create-bucket.html\">criar um balde<\/a> no Couchbase. Esse pode ser o bucket \"travel-sample\" fornecido com o Couchbase ou um bucket criado por voc\u00ea mesmo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Se voc\u00ea estiver usando o Couchbase Server 5.0, tamb\u00e9m precisar\u00e1 criar um usu\u00e1rio. D\u00ea a esse usu\u00e1rio a permiss\u00e3o Cluster Admin e d\u00ea a ele o mesmo nome do bucket, apenas para manter as coisas simples, caso esteja acompanhando o processo.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_dependency_injection_with_couchbase_extensions\">Inje\u00e7\u00e3o de depend\u00eancia com o Couchbase.Extensions<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\">Couchbase.Extensions (GitHub)<\/a> tem como objetivo tornar mais simples o trabalho com o Couchbase Server e o ASP.NET Core. A inje\u00e7\u00e3o de depend\u00eancia \u00e9 apenas uma dessas extens\u00f5es.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode adicion\u00e1-lo ao seu projeto ASP.NET Core com o NuGet:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Usando o Package Manager: <code>Instalar o pacote Couchbase.Extensions.DependencyInjection -Vers\u00e3o 1.0.2<\/code><\/li>\n<li>Com a interface do usu\u00e1rio do NuGet<\/li>\n<li>Use a linha de comando do .NET: <code>dotnet add package Couchbase.Extensions.DependencyInjection --vers\u00e3o 1.0.2<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><em>(A vers\u00e3o 1.0.2 \u00e9 a vers\u00e3o mais recente no momento da reda\u00e7\u00e3o deste 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>Em seguida, voc\u00ea precisar\u00e1 fazer altera\u00e7\u00f5es em seu <code>Inicializa\u00e7\u00e3o<\/code> classe em <code>Startup.cs<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Na postagem do blog sobre cache, eu codifiquei a configura\u00e7\u00e3o:<\/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>Isso \u00e9 bom para demonstra\u00e7\u00f5es e publica\u00e7\u00f5es em blogs, mas voc\u00ea provavelmente desejar\u00e1 usar um arquivo de configura\u00e7\u00e3o para um projeto de produ\u00e7\u00e3o.<\/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>Supondo que voc\u00ea esteja usando o padr\u00e3o <code>Configura\u00e7\u00f5es do aplicativo.json<\/code>atualize esse arquivo para adicionar uma se\u00e7\u00e3o do 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>Ao criar uma se\u00e7\u00e3o \"Couchbase\", o m\u00f3dulo de inje\u00e7\u00e3o de depend\u00eancia ler\u00e1 diretamente do arquivo de texto appsettings.json.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_constructor_injection\">Inje\u00e7\u00e3o de construtor<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Depois que a inje\u00e7\u00e3o de depend\u00eancia estiver configurada, voc\u00ea poder\u00e1 come\u00e7ar a injetar objetos \u00fateis em suas classes. Voc\u00ea pode injet\u00e1-los em controladores, servi\u00e7os ou reposit\u00f3rios.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqui est\u00e1 um exemplo de inje\u00e7\u00e3o em <code>HomeController<\/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>Em seguida, vamos fazer um simples <code>Obter<\/code> em um documento conhecido em \"travel-sample\". Esse uso de token do SDK do Couchbase .NET mostrar\u00e1 a inje\u00e7\u00e3o de depend\u00eancia em a\u00e7\u00e3o. Farei uma altera\u00e7\u00e3o no arquivo <code>Sobre<\/code> m\u00e9todo de a\u00e7\u00e3o. Nesse m\u00e9todo, ele recuperar\u00e1 um documento de rota e escrever\u00e1 o n\u00famero do equipamento.<\/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>E o resultado \u00e9:<\/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>Sucesso! A inje\u00e7\u00e3o de depend\u00eancia funcionou e estamos prontos para usar um bucket do Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Se n\u00e3o estiver usando \"travel-sample\", use uma chave do seu pr\u00f3prio bucket.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_named_buckets\">Baldes nomeados<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Voc\u00ea pode usar a inje\u00e7\u00e3o de depend\u00eancia para um \u00fanico bucket em vez de ter que especificar o nome todas as vezes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Comece criando uma interface que implemente <code>INamedBucketProvider<\/code>. Deixe-o vazio. Aqui est\u00e1 um exemplo:<\/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>Em seguida, em Startup.cs, mapeie essa interface para um bucket usando <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>Agora, o <code>ITravelSampleBucketProvider<\/code> \u00e9 injetado em vez do provedor mais geral.<\/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\">Inje\u00e7\u00e3o de depend\u00eancia mais complexa<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>At\u00e9 este ponto, s\u00f3 usamos a inje\u00e7\u00e3o de depend\u00eancia nos controladores. A inje\u00e7\u00e3o de depend\u00eancia come\u00e7a a render dividendos com gr\u00e1ficos de objetos mais complexos e profundos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como exemplo, imagine uma classe de servi\u00e7o que usa um bucket do Couchbase, mas tamb\u00e9m usa um servi\u00e7o de e-mail.<\/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>Em seguida, vamos usar esse servi\u00e7o em um controlador (ou seja, torn\u00e1-lo uma depend\u00eancia). Mas observe que o controlador n\u00e3o est\u00e1 usando diretamente o bucket ou o servi\u00e7o de e-mail.<\/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>Se eu fosse instanciar <code>ComplexService<\/code> manualmente, eu teria que instanciar pelo menos dois outros objetos. Seria algo parecido com: <code>novo ComplexService(novo BucketProvider(), novo MyEmailService()<\/code>. \u00c9 muita coisa que tenho que controlar e, se alguma depend\u00eancia mudar, \u00e9 preciso fazer muita manuten\u00e7\u00e3o manual.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em vez disso, posso fazer com que o ASP.NET Core use a inje\u00e7\u00e3o de depend\u00eancia para fazer tudo isso por mim. Voltar em <code>Inicializa\u00e7\u00e3o<\/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>Agora, o ASP.NET Core sabe como instanciar:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>ITravelSampleBucketProvider<\/code>gra\u00e7as ao Couchbase.Extensions.DependencyInjection<\/li>\n<li><code>IEmailService<\/code> - Eu disse a ele para usar <code>MyEmailService<\/code><\/li>\n<li><code>IComplexService<\/code> - Eu disse a ele para usar <code>ComplexService<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Por fim, quando <code>AprovarControlador<\/code> for instanciado, o ASP.NET Core saber\u00e1 como fazer isso. Ele criar\u00e1 <code>ComplexService<\/code> ao instanciar <code>MyEmailService<\/code> e <code>ComplexService<\/code>. Ele injetar\u00e1 <code>ComplexService<\/code> automaticamente no construtor do `ApproveController`. O 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 o exemplo completo, n\u00e3o deixe de conferir o <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/078AspNetCoreDependencyInjection\/src\/CouchbaseDIExample\">c\u00f3digo-fonte que acompanha esta postagem do blog no GitHub<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_cleaning_up\">Limpeza<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>N\u00e3o se esque\u00e7a de fazer a limpeza. Quando o aplicativo ASP.NET Core for interrompido, libere todos os recursos que o SDK do Couchbase .NET estiver usando. Na se\u00e7\u00e3o <code>Configurar<\/code> no Startup, adicione um par\u00e2metro do 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 disso <code>Configurar<\/code> configure um m\u00e9todo <code>ApplicationStopped<\/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\">Resumo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A inje\u00e7\u00e3o de depend\u00eancia \u00e9 um assunto rico. Livros inteiros foram escritos sobre ela e seus benef\u00edcios para seu aplicativo. Esta postagem do blog apenas arranhou a superf\u00edcie e nem sequer abordou os benef\u00edcios da testabilidade.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase.Extensions.DependencyInjection facilita a inje\u00e7\u00e3o do Couchbase no ASP.NET Core.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea tiver perguntas ou coment\u00e1rios, n\u00e3o deixe de conferir o <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">Reposit\u00f3rio do GitHub<\/a> ou o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/net-sdk\/\">F\u00f3runs do SDK do Couchbase .NET<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>E entre em contato comigo para fazer perguntas, deixando um coment\u00e1rio abaixo ou encontrando-me em <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 v26.2 (Yoast SEO v26.2) - 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\/pt\/dependency-injection-aspnet-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dependency Injection Framework with ASP.NET Core + Couchbase","description":"Nesta postagem sobre o Couchbase, a estrutura de inje\u00e7\u00e3o de depend\u00eancia ser\u00e1 explorada em profundidade. Fique \u00e0 vontade para acompanhar os exemplos de c\u00f3digo dispon\u00edveis no 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\/pt\/dependency-injection-aspnet-couchbase\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"Nesta postagem sobre o Couchbase, a estrutura de inje\u00e7\u00e3o de depend\u00eancia ser\u00e1 explorada em profundidade. Fique \u00e0 vontade para acompanhar os exemplos de c\u00f3digo dispon\u00edveis no GitHub.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4005"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4005\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4006"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4005"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}