Esta postagem do blog é a parte 3 de uma série:
- A Parte 1 abordou como instalar e configurar o Couchbase no Windows
- A Parte 2 abordou alguns termos do Couchbase que você precisará conhecer
Você está pronto para escrever algum código? Nesta postagem do blog, iniciaremos um novo projeto ASP.NET MVC, adicionaremos o SDK do Couchbase a ele com o NuGet e teremos a infraestrutura pronta para começar a usar o Couchbase.
Iniciei no Visual Studio com File->New, selecionei ASP.NET Web Application e, em seguida, selecionei "MVC". Presumo que você tenha alguma familiaridade com o ASP.NET MVC, mas se algo parecer fora do comum para você, deixe um comentário, me envie uma mensagem no Twitterou envie-me um e-mail (matthew.groves AT couchbase DOT com) com suas perguntas.
Instalação da biblioteca do cliente Couchbase
A primeira coisa que precisamos fazer é adicionar o cliente Couchbase .NET. Você pode fazer isso com a interface do usuário do NuGet, clicando com o botão direito do mouse em "References" (Referências), clicando em "Manage NuGet Packages" (Gerenciar pacotes NuGet), clicando em "Browse" (Procurar) e pesquisando "CouchbaseNetClient". (Se quiser, você pode procurar por "Linq2Couchbase" em vez disso. A instalação desse pacote também fará com que o CouchbaseNetClient seja instalado, mas na verdade não usarei nenhum Linq2Couchbase até posts posteriores no blog).
Se preferir a linha de comando do NuGet, abra o console do Package Manager e digite Instalar o pacote CouchbaseNetClient
.
Como fazer com que o aplicativo ASP.NET se comunique com um cluster do Couchbase
Agora vamos configurar o aplicativo ASP.NET para poder se conectar ao Couchbase. A primeira coisa que precisamos fazer é localizar o cluster do Couchbase. O melhor lugar para fazer isso é no Global.asax.cs quando o aplicativo é iniciado. No mínimo, precisamos especificar um nó no cluster e fornecê-lo ao comando Ajudante de cluster
. Isso só precisa ser feito uma vez em Início_do_aplicativo
. Quando o aplicativo terminar, é uma boa ideia fechar o Ajudante de cluster
para limpar e descartar recursos que não são necessários.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
público classe MvcApplication : Sistema.Web.HttpApplication { protegida vazio Início_do_aplicativo() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filtros); RouteConfig.RegistrarRotas(Tabela de rotas.Rotas); var configuração = novo Configuração de cliente(); configuração.Servidores = novo Lista { novo Uri("http://localhost:8091") }; configuração.UseSsl = falso; Ajudante de cluster.Inicializar(configuração); } protegida vazio Application_End() { Ajudante de cluster.Fechar(); } } |
Algumas observações:
- Este código pressupõe que você esteja executando um nó do Couchbase em seu computador local (localhost). Se isso não for verdade, substitua por localhost. Por exemplo, eu tenho um nó do Couchbase em execução em uma máquina diferente no meu escritório, então eu substituiria
novo Uri("http://192.168.1.5")
. - UseSsl está definido como false, porque não tenho um certificado em execução no meu nó do Couchbase. Se você estiver acessando o Couchbase pela Internet, poderá usar o SSL para evitar que o tráfego de dados seja enviado de forma clara.
Configuração de um contêiner IoC
Depois que o ClusterHelper for inicializado, poderemos usá-lo para acessar os buckets.
Há muitas maneiras de proceder para conectar as dependências em seu aplicativo, mas eu gosto de usar um contêiner IoC. Há muitas ferramentas de IoC disponíveis para .NET, mas a minha favorita é Mapa de estrutura. Há outro pacote NuGet que integra o StructureMap ao MVC para você. Depois de instalá-lo, os objetos do controlador MVC serão instanciados por meio do StructureMap. Instale com o NuGet (UI ou console), StructureMap.MVC5
.
Ele adicionará o StructureMap ao seu projeto, bem como vários outros arquivos. Um deles é o DefaultRegistry.cs, que configura o StructureMap para usar as convenções padrão.
O que precisaremos fazer com o Couchbase é modificar esse registro para que o StructureMap possa nos fornecer uma instância do IBucket. Um IBucket, então, é usado para interagir com um bucket do Couchbase (obter documentos, adicionar documentos, atualizar documentos e assim por diante). Veja a seguir como configurar um registro do IBucket:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
público classe Registro Padrão : Registro { Construtores e Destrutores de #region público Registro Padrão() { Escaneamento( escaneamento => { escaneamento.TheCallingAssembly(); escaneamento.WithDefaultConventions(); escaneamento.Com(novo ControllerConvention()); }); // este próximo 'For' é o que eu adicionei para o Couchbase Para().Singleton().Uso("Obter um bucket do Couchbase", x => Ajudante de cluster.GetBucket("hello-couchbase", "senha!")); } #endregion } |
Neste exemplo:
- Estou usando o ClusterHelper para obter um bucket específico (que chamei de "hello-couchbase", mas você pode chamar como quiser). Certifique-se de que esse bucket exista no Couchbase (você pode usar o "default" ou um dos buckets de exemplo se tiver configurado um em Parte 1 desta série do blog).
- Não é obrigatório colocar uma senha em um bucket, mas é uma boa ideia.
- A instância do IBucket é um singleton, porque não há motivo para ter várias instâncias dele.
Usando o IBucket em um controlador
Apenas para mostrar que isso funciona, vá em frente e adicione o IBucket a um construtor de um controlador, por exemplo, HomeController. O StructureMap já foi configurado para instanciar os controladores e já dissemos a ele como instanciar um IBucket. (A longo prazo, você provavelmente não desejará usar o IBucket diretamente no controlador; falaremos mais sobre isso em posts futuros do blog).
1 2 3 4 5 6 7 8 9 10 |
público classe HomeController : Controlador { privado somente leitura IBucket _bucket; público HomeController(IBucket balde) { _bucket = balde; } } |
Em seguida, adicione um documento ao seu bucket, diretamente no Console do Couchbase. Anote a chave que você fornecer a ele.
Agora, adicione uma ação ao HomeController. Essa é uma ação descartável apenas para fins de demonstração. É a coisa mais simples que pode ser feita: ela obterá o documento com base na chave e escreverá os valores do documento na resposta.
1 2 3 4 5 6 |
público Resultado da ação Índice() { var doc = _bucket.Obter("foo::123"); retorno Conteúdo("Name: " + doc.Valor.nome + ", Endereço: " + doc.Valor.endereço); } |
doc.Value
é do tipo dinâmico
Portanto, certifique-se de que os campos que você usa (no meu caso, nome e endereço) correspondam ao documento JSON que você colocou no bucket. Execute seu site MVC em um navegador e você verá algo parecido com isto:
Parabéns, você conseguiu criar um site ASP.NET que usa o Couchbase. Não foi tão difícil, foi?
Conclusão
Mostrei a você os princípios básicos de conexão e uso do Couchbase no ASP.NET MVC. Mas podemos fazer muito melhor. Na próxima postagem do blog, mostrarei como usar o Linq2Couchbase para criar uma entidade, um repositório, e como usar esse repositório para criar um site com funcionalidade real. Como sempre, se você precisar de ajuda com qualquer coisa, deixe um comentário, me envie uma mensagem no Twitterou envie um e-mail para mim (matthew.groves AT couchbase DOT com).
Fiz tudo o que foi explicado aqui, mas não estou conseguindo resolver o erro de injeção de dependência
"Nenhum construtor sem parâmetros definido para este objeto.". Há algo mais que precise ser feito para o StructureMap side....?
Observe que esta postagem do blog foi escrita com o Couchbase Server 4.x em mente. Se você estiver usando a versão 5 ou 6, é possível que o ClusterHelper.OpenBucket não esteja retornando um bucket. A autenticação foi alterada entre as versões 4 e 5.
Você também pode querer ter certeza de que está seguindo as convenções do StructureMap, pois eu uso "scan.WithDefaultConventions()" nesse exemplo.
Por fim, desde a época em que escrevi esta postagem, o StructureMap foi descontinuado em favor do Lamar (https://jasperfx.github.io/lamar/), portanto, talvez você queira mudar para ele se puder.