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

Vista: 20252|Resposta: 1

[Fonte] O escopo da instância do componente autofac

[Copiar link]
Publicado em 14/09/2018 13:22:21 | | | |
O escopo da instância determina como os serviços são compartilhados entre as requisições.

Endereço original:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

Uma instância por dependência

Com essa opção, uma nova instância é retornada a cada solicitação do serviço. Use InstancePerDependency(). Essa é a opção padrão. O código abaixo, linhas 2 e 3, é equivalente.

O código a seguir gera uma nova instância para cada ciclo, totalizando 100 instâncias.

Instância única

Use essa opção para solicitar um serviço tanto no escopo raiz quanto no aninhado, ambos retornando a mesma instância. Use SingleInstance() para especificar.


O código abaixo, w1 e w2 são sempre o mesmo objeto, e há apenas uma instância da classe Worker em 100 loops.


Uma instância por escopo do ciclo de vida

Use essa opção para solicitar um serviço em um ILifetimeScope específico, retornando apenas uma instância. Use InstancePerLifetimeScope(). No código a seguir, os 100 vezes w1 no escopo1 são o mesmo objeto, e os 100 vezes w2 no escopo2 são o mesmo objeto, mas w1 e w2 não são o mesmo objeto.


Uma instância por intervalo de ciclo de vida correspondente

Semelhante a [uma instância por escopo de ciclo de vida] acima, mas com mais controle. Use essa opção para permitir que o objeto ILifetimeScope receba uma Tag. Há apenas uma ocorrência dentro da faixa da luta de duplas. Use o método InstancePerMatchingLifetimeScope().

No código abaixo, w1 e w2 são iguais, w3 e w4 são iguais, mas w1 e w3 são diferentes.

A marcação apropriada deve ser fornecida durante a análise sintática, e o código a seguir lança uma exceção.

Uma instância por solicitação

Algumas aplicações naturalmente possuem semântica de Request, como ASP.NET MVC ou aplicações WebForm. [Uma instância por requisição] é implementada com base em [uma instância por intervalo de ciclo de vida correspondente], fornecendo marcadores de escopo, funções de registro e integração de tipos comuns. Basicamente, [uma instância por intervalo de ciclo de vida correspondente].

ASP.NET Core usa uma instância por escopo de ciclo de vida em vez de uma instância por requisição.

Uma instância por Propriedade

O<T> tipo de associação implícita Propriedade cria faixas de ciclo de vida aninhadas. Com o registro de instância por posse, você pode limitar dependências às instâncias possuídas.

Neste caso, o serviço ServiceForHandler é limitado ao escopo da instância MessageHandler.


Faixa de rosca

O Autofac pode forçar os objetos da thread A a não satisfazerem as dependências da thread B.

Depois, deixe cada um criar seu próprio escopo de vida

Importante: Em um cenário multithread, tome cuidado para não limpar o escopo pai.Caso contrário, os subescopos na thread derivada não conseguirão resolver o serviço.

Cada thread terá sua própria instância de MyThreadScopedComponent, que é essencialmente um singleton com escopo de ciclo de vida. Instâncias no escopo não são fornecidas externamente, então é fácil manter os componentes isolados entre threads.

Ao adicionar o parâmetro ILifetimeScope, o intervalo pai pode ser injetado no código que gera a thread, e o Autofac injetará automaticamente o intervalo atual, que pode ser usado para criar escopos aninhados.

Se quiser controlar mais, pode usar [uma instância por intervalo de ciclo de vida correspondente] para associar componentes com escopo de thread a escopos internos de ciclo de vida, como mostrado na figura:



O "Contexto" no diagrama é a faixa de ciclo de vida criada pelo método BeginLifetimeScope.





Anterior:Efeitos de cliques do mouse: liberdade, democracia, prosperidade
Próximo:{&quot;error_msg&quot;: &quot;Falha na certificação IAM&quot;}
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