|
|
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, prosperidadePróximo:{"error_msg": "Falha na certificação IAM"}
|