Asp.net Autofac FactoryScope Linq到SQL数据上下文

Asp.net Autofac FactoryScope Linq到SQL数据上下文,asp.net,linq-to-sql,autofac,Asp.net,Linq To Sql,Autofac,FactoryScope向Linq to SQL数据上下文注册意味着什么?谁负责处理这个问题 这是我看到的代码。对于ASP.NET应用程序,我假设不建议将FactoryScope用于数据上下文 builder.Register(c => new MyDataContext("connectionString")) .As<MyDataContext>() .FactoryScoped(); builder.Register(c=>newmydata

FactoryScope
向Linq to SQL数据上下文注册意味着什么?谁负责处理这个问题

这是我看到的代码。对于ASP.NET应用程序,我假设不建议将
FactoryScope
用于数据上下文

builder.Register(c => new MyDataContext("connectionString"))
       .As<MyDataContext>()
       .FactoryScoped();
builder.Register(c=>newmydatacontext(“connectionString”))
.As()
.FactoryScope();

1.x中的FactoryScope
在2.x中被重命名为
InstancePerDependence
,我更能描述这种效果。这意味着每次注入服务时,Autofac都将提供一个新实例。在您的情况下,将在注入时创建一个新的数据上下文

Autofac仍将负责处理,但此处存在陷阱。
MyDataContext
的每个实例都将在当前生存期范围内被跟踪,因此在释放范围之前不会被释放


要自行控制处置,您可以使用
ExternallyOwned
标记注册。您还可以查看
Owned
类型。阅读并。

已注册的服务
InstancePerDependency
可以在容器之前处置。例如,在web应用程序中,注册为IPD或每个生命周期的服务将在Http请求结束时被释放。这里的关键是正确使用生存期范围。请参阅和,其中创建者声明“不要从根容器解析。始终从根容器解析,然后释放一个生存范围。”@Jim-你是对的,我认为生存范围是“容器”,但我同意措辞不正确。会更正的。有趣的是,Autofac过去称它们为嵌套容器。当他们被重新命名为LifetimeScope时,但现在当我试图向另一个人解释它时,我会这么做。