Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22873|Resposta: 0

[Fonte] .NET/C# implementa AOP via Autofac e DynamicProxy

[Copiar link]
Publicado em 04/11/2017 12:21:23 | | | |
O que é AOP? Citando a Enciclopédia Baidu: AOP é a abreviação de Programação Orientada a Aspectos, que significa: uma tecnologia para programação orientada à face para alcançar a manutenção unificada das funções do programa por meio de métodos de pré-compilação e agentes dinâmicos durante a execução. Existem duas maneiras principais de implementar o AOP: uma é implantação estática em tempo de compilação, a vantagem é a alta eficiência, a desvantagem é a falta de flexibilidade, e o postsharp em .net é o representante (este é carregado). O outro método são proxies dinâmicos, que têm vantagens e desvantagens opostas aos primeiros, criando proxies dinamicamente para o tipo alvo e interceptando-os por meio de chamadas de proxy. O que o AOP pode fazer, casos de uso comuns são processamento de transações, logs, etc. Vamos falar sobre como o Autofac implementa o AOP, o Autofac é um container IOC muito bom no .net e tem ótimo desempenho (o container mais eficiente no .net), além do AOP ser simplesmente um tigre. O AOP do Autofac é implementado através da parte central do projeto Castle (também um container) chamada Autofac.Extras.DynamicProxy, que, como o nome sugere, é implementado como um proxy dinâmico.

Preparação antes do uso:

Instale o pacote Nuget Autofac, Autofac.Extras.DynamicProxy, e três referências serão adicionadas após a instalação bem-sucedida


Agora está oficialmente iniciado!



Passo 1: Criar um interceptador

Abaixo está um exemplo de um interceptor simples que exibe o nome do método interceptado, uma lista de parâmetros e o resultado de retorno

Passo 2: Registrar o interceptor no contêiner Autofac

O interceptor deve estar registrado no contêiner Aufofac, seja pelo tipo de interceptor ou pelo nome, o que torna o método de uso do interceptor diferente (conforme discutido adiante).


Injeção de nomes
construtor. Register(c => novo CallLogger(Console.Out)). <IInterceptor>Nomeados ("log-calls");

Injeção tipo
construtor. Register(c => novo CallLogger(Console.Out));


Passo 3: Ativar o interceptador

Existem duas maneiras principais de habilitar o interceptor: EnableInterfaceInterceptors(), EnableClassInterceptors().

O método EnableInterfaceInterceptors cria dinamicamente um proxy de interface

O método EnableClassInterceptors criará uma subclasse proxy da classe alvo, e deve ser notado aqui que ele apenas interceptará o método virtual e sobrescreverá o método

Ative código de exemplo do Interceptor:


Passo 4: Indique o tipo que você deseja interceptar

Existem duas maneiras:

O primeiro tipo: Adicionar um atributo de característica ao tipo




O segundo tipo é injetar dinamicamente o interceptor quando o tipo de registro é transferido para o contêiner


Passo 5: Teste o efeito

1. Interceptação por procuração



Código de classe circular:



2. Interceptação de proxy de interface



Código de Interface IShape:

Código de classe circular:







Anterior:Código-fonte da Ferramenta de Fechar Port VS2010 C#
Próximo:Função de criptografia do JS-MD5
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com