Neste artigo estarei apresentando como podemos trabalhar com DI, utilizando a EL 5.0. Mas o que vem a ser uma DI? Para quem ainda não sabe, o que é uma EL? Bom primeiramente a Enterprise Library, é uma biblioteca de blocos de códigos, os quais podem ser utilizados em conjunto ou separadamente em suas aplicações, acelerando ainda mais o processo de construção da infraestrutura da arquitetura de um sistema ou mesmo do desenvolvimento de funcionalidades das aplicações. Uma DI, é uma Dependency Injection ou Injeção de Dependência.

Injeção de dependência, trata-se de um novo recurso que está sendo bastante utilizado nas atuais aplicações ou arquiteturas. Mais porquê a DI está utilizando? O que ela pode melhorar o processo de desenvolvimento de software? Quando temos uma aplicação, que faz uso de classes pré-definidas e já programadas de maneira fixa no nosso código, leva o sistema a ficar totalmente dependente dessas classes que foram pré-definidas. Com a injeção de dependência, nós podemos criar aplicações um pouco mais flexíveis, onde por meio de interfaces de código, podemos flexibilizar a chamada à outras classes, sem precisar que o seu bloco de código fique estaticamente acoplado com aquela determinada classe. A EL 5.0 adicionou esse novo recurso de DI, facilitando nossas implementações do dia a dia.

Hoje temos alguns frameworks para se trabalhar com IoC ou DI:

Castle Windsor

Structure Map

Spring.NET

AutoFac

Unity

Ninject

Bom, o framework que iremos utilizar é o Unity que está contido dentro da EL 5.0. Você pode baixar o instalador da EL atravês do link: Enterprise Library 5.0, vamos começar então a mostrar uma aplicação a qual faz uso de interfaces de código, para mostrar um como é fácil, prático e deixa sua aplicação um pouco mais flexível utilizando Dependency Injection.

Vamos abrir o nosso Visual Studio 2010. Vá até o menu File -> New Project e selecione a opção Console Application, e dê o nome de DependencyInjectionUnity para seu projeto Console, como mostrado na Figura-1:

Figura-1



Com o nosso projeto criado, temos que criar uma Interface que chamaremos de ILogger e duas outras classes que se chamarão: LoggerWeb e LoggerWindows. Quero deixar claro que as classes e interfaces estão todas sendo construídas dentro do próprio projeto Console, por questões didáticas.

A implementação das classes e da Interface estão nos códigos abaixo:

Implementação da Interface ILogger:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DependencyInjectionUnity
{
interface ILogger
{
void RegisterMessage();
}
}

Implementação das Classes que implementam a Inteface:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DependencyInjectionUnity
{
public class LoggerWindows : ILogger
{

#region ILogger Members

public void RegisterMessage()
{
Console.WriteLine("Log da aplicação Windows");
}

#endregion
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DependencyInjectionUnity
{
public class LoggerWeb : ILogger
{

#region ILogger Members

public void RegisterMessage()
{
Console.WriteLine("Log da aplicação Web");
}

#endregion
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;

namespace DependencyInjectionUnity
{
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, LoggerWindows>();
container.RegisterType<ILogger, LoggerWeb>();

ILogger loggerWindows = container.Resolve<LoggerWindows>();
ILogger loggerWeb = container.Resolve<LoggerWeb>();

loggerWindows.RegisterMessage();
loggerWeb.RegisterMessage();

Console.ReadKey();
}
}
}

Acima, você pode observar as implementações necessárias para que a dependência de injeção de código possa funcionar. Contudo, precisamos adicionar 2 referências ao nosso projeto, como mostramos nas Figura-2 e Figura-3:

Figura-2





Agora que as referências já foram adicionadas ao projeto. Podemos compilar a aplicação e testar o projeto. A princípio, você pode não ter uma visão mais aprofundada e deve estar se preguntando: Tá, implementamos tudo isso, para eu ver que posso fazer isso sem essa outra camada Unity da Enterprise Library !

OK! Concordo com você, mas não em tudo. A Dependência de Injeção, vai muito além disso. Vamos supor que tenhamos uma gama diversa de repositórios? Se tivermos que tipar nossa persistência às diversas variações de nossos repositórios de persistências, deixariamos nossa persistência 100% acoplada à essas classes de repositório. Contudo, o Unity favorece ao baixo acoplamento entre as suas classes de repositório, como exemplo.

Para você poder ter um entendimento melhor sobre como funciona o Unity, acesso o site: Unity Application Block

Espero que tenha sido útil o post.

Até o próximo :)

Exibições: 95

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

© 2018   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço