No meu último post da série sobre a Enterprise Library expliquei como podemos utilizar a extensão de biblioteca InterceptionExtension do Unity para aplicar interceptação na chamada da interface ILogger aplicando uma característica AOP no container. O exemplo levava em consideração que a definição fosse realizada em tempo de execução. Veremos agora como podemos modificar o exemplo anterior colocando todas as definições no arquivo de configuração da aplicação.
Dentro do arquivo de configuração, adicione dentro da sessão typeAliases os tipos descritos abaixo:
<typeAliases> ... <typeAlias alias="GUIDAttribute" type="Reverb.Handlers.GUIDAttribute, Reverb.InterceptionSample" /> <typeAlias alias="GUIDHandler" type="Reverb.Handlers.GUIDHandler, Reverb.InterceptionSample" /> <typeAlias alias="interface" type="Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor, Microsoft.Practices.Unity.Interception, Version=1.2.0.0" /> </typeAliases>
Em seguida adicione um novo container dentro da sessão Containers, conforme descrito abaixo:
<container name="InterfaceInterceptionContainer"> <extensions> <add type="Microsoft.Practices.Unity.InterceptionExtension.Interception, Microsoft.Practices.Unity.Interception" /> </extensions> <extensionConfig> <add name="interception" type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationElement, Microsoft.Practices.Unity.Interception.Configuration"> <interceptors> <interceptor type="interface"> <key type="ILogger"/> </interceptor> </interceptors> </add> </extensionConfig> <types> <type type="ILogger" mapTo="ConsoleLogger" /> </types> </container>
Por fim o construtor da classe Servico deve ser alterado da seguinte forma:
public Servico() { container = new UnityContainer(); section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); section.Containers["InterfaceInterceptionContainer"].Configure(container); logger = container.Resolve<ILogger>(); }
Repare que modificamos o código anterior retirando toda a configuração para ser usada em tempo de execução e colocando em seu lugar a linha 6 que diz qual configuração utilizaremos para adicionarmos a extensão de interceptação do Unity. Assim, é possível conferir maior facilidade para alterações nas definições de interceptação, sem a necessidade de recompilar toda a aplicação (a menos, é claro, que você adicione um novo handler).
Até o próximo post da série.
Comentários recentes