Instance Scope

1、instance per dependency    (the default)

builder.RegisterType<classes>();等价于

builder.RegisterType<classes>().InstencePerDenpendency();

每次都创建一个新的依赖

2、single instance

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

单例,每次都返回同一个

3、instance per lifetime scope

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

在同一个生命周期中返回同一个实例

官方文档eg:

using(var scope1 = container.BeginLifetimeScope())
{
  for(var i = 0; i < 100; i++)
  {
    // Every time you resolve this from within this
    // scope you'll get the same instance.
    var w1 = scope1.Resolve<Worker>();
  }
}

using(var scope2 = container.BeginLifetimeScope())
{
  for(var i = 0; i < 100; i++)
  {
    // Every time you resolve this from within this
    // scope you'll get the same instance, but this
    // instance is DIFFERENT than the one that was
    // used in the above scope. New scope = new instance.
    var w2 = scope2.Resolve<Worker>();
  }
}

scope1中每次循环返回同一个Worker实例

scope2中每次循环返回同一个Worker实例

但是,scope1中的实例和scoper2中的实例并不是同一个

4、instance per matching lifetime scope

没看懂

builder.RegisterType<classes>.InstancePerMatchingLifetimeScope("my");

5、instance per request

每次请求返回一个实例(在这个请求的lifetime scope)

per request是matching lifetime scope的一种

InstancePerRequest()  最终执行Autofac.Core.Lifetime.MatchingScopeLifetimeTags.AutofacWebRequest  

等价于:builder.RegisterType<classes>.InstancePerMatchingLifetimeScope("AutofacWebRequest");

posted on 2015-05-11 23:47  fuyujian  阅读(558)  评论(0编辑  收藏  举报