AutoFac生命周期

1.建立一个新的生命周期范围

您能够经过在任何现有生命周期做用域上从根容器开始调用BeginLifetimeScope()方法来建立生命周期做用域。生命周期做用域是可销毁的,他们跟踪组件的处置,因此确保你老是调用“Dispose()”或者把它们包装在“using”语句中。

 using(var scope = container.BeginLifetimeScope())
    {
      // 从做为根容器子项的做用域来解析服务
      var service = scope.Resolve();
  
      // 可以建立嵌套的做用域...
      using(var unitOfWorkScope = scope.BeginLifetimeScope())
      {
        var anotherService = unitOfWorkScope.Resolve();
     }
   }

2.实例周期范围

2.1一个依赖一个实例(InstancePerDependency)

使用这个选项,每次请求服务都会返回一个新实例,这是默认选项

  var builder = new ContainerBuilder();
  builder.RegisterType();
  builder.RegisterType().InstancePerDependency();

2.2  单个实例(SingleInstance)

在整个进程中,对象永远都是同一个实例

var builder = new ContainerBuilder();
builder.RegisterType().SingleInstance();

2.3每一个生命周期范围一个实例 (InstancePerLifetimeScope)

var builder = new ContainerBuilder();
builder.RegisterType().InstancePerLifetimeScope();

2.4每一个匹配的生命周期范围一个实例(InstancePerMatchingLifetimeScope)

 var builder = new ContainerBuilder();
 builder.RegisterType().InstancePerMatchingLifetimeScope("myscope");

2.5 每一个请求一个实例( InstancePerRequest)

var builder = new ContainerBuilder();
builder.RegisterType().InstancePerRequest();

2.6每一个 Owned 一个实例 ( InstancePerOwned)

var builder = new ContainerBuilder();
builder.RegisterType();
builder.RegisterType().InstancePerOwned();

// 本例中 ServiceForHandler 服务会限制在 MessageHandler 实例范围内。
using(var scope = container.BeginLifetimeScope())
    {
      // MessageHandler 和附属的 ServiceForHandler 
      // 在 scope 下面的一个微型的 lifetime scope 中。
      // 解析 Owned 须要程序员负责执行清理工做。
      var h1 = scope.Resolve>();
      h1.Dispose();
    }

2.7 线程范围经过

// InstancePerLifetimeScope,每一个线程创建本身的LifetimeScope
var builder = new ContainerBuilder();
builder.RegisterType().InstancePerLifetimeScope();

var container = builder.Build();

// 而后让每一个建立本身的 lifetime scope
void ThreadStart()
    {
      using (var threadLifetime = container.BeginLifetimeScope())
      {
        var thisThreadsInstance = threadLifetime.Resolve(); 
    } 
  }

注:在多线程场景下,要当心不要将父范围清理掉。不然,派生线程中的子范围将没法解析服务。

你可能感兴趣的:(c#,visualstudio)