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");