zoukankan      html  css  js  c++  java
  • autofac 实例生命周期

    转自逆心博客园

    autofac 实例生命周期

      实例生命周期决定在同一个服务的每个请求的实例是如何共享的。

      当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用域) 或者在某种上下文环境中的单例。比如 一个线程 或者一个HTTP请求 (per lifetime 作用域)。

      这条规则适用于显式调用Resolve从容器中检索对象或者满足依赖而隐式实现的对象。

      1、Per Dependency

      在其他容器中也称作瞬态或者工厂,使用Per Dependency作用域,服务对于每次请求都会返回互补影响实例。

      在没有指定其他参数的情况下,这是默认是作用域。

      builder.RegisterType<Worker>();
     
      // or
     
      builder.RegisterType<Worker>().InstancePerDependency();

      2、Single Instance

      使用Single Instance作用域,所有对父容器或者嵌套容器的请求都会返回同一个实例。

      builder.RegisterType<Worker>().SingleInstance();

      3、Per Lifetime Scope

      这个作用域适用于嵌套的生命周期。一个使用Per Lifetime 作用域的component在一个 nested lifetime scope内最多有一个实例。

      当对象特定于一个工作单元时,这个非常有用。比如,一个HTTP请求,每一个工作单元都会创建一个nested lifetime,如果在每一次HTTP请求中创建一个nested lifetime,那么其他使用 per-lifetime 的component在每次HTTP请求中只会拥有一个实例。

      这种配置模型在其他容器中等价于per-HTTP-request, per-thread等。

      builder.RegisterType<Worker>().InstancePerLifetimeScope();

      ASP.NET和WCF集成中,每一次web请求或者方法调用,InstancePerLifetimeScope会被默认附加到component上。

       4、上下文

      上下文作用域和per-lifetime作用域类似,但是对可见性提供更多显示的控制。

      在大多数程序中,同一层次的容器嵌套代表一个工作单元,如果需要多层嵌套(例如global->request->transation),可以使用标签确保component在多层结构中的某一层共享。

      builder.RegisterType<XWorker>().InstancePerMatchingLifetimeScope(MyContextHierarchy.UserSession);

      提供的标签和生命周期作用域是对应的

      var userSessionLifetime = container.BeginLifetimeScope();
      userSessionLifetime.Tag = MyContextHierarchy.UserSession;
  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/gaocong/p/7465875.html
Copyright © 2011-2022 走看看