Autofac FactoryScoped Linq to SQL数据上下文

Oma*_*mar 2 asp.net autofac linq-to-sql

什么是FactoryScoped用的LINQ to SQL数据上下文注册是什么意思?谁负责处置?

这是我看到的代码.对于ASP.NET应用程序,我认为FactoryScoped不建议用于数据上下文?

builder.Register(c => new MyDataContext("connectionString"))
       .As<MyDataContext>()
       .FactoryScoped();
Run Code Online (Sandbox Code Playgroud)

Pet*_*old 5

FactoryScoped在1.x中重命名为2.x InstancePerDependency,这更好地描述了效果.这意味着每次注入服务时,Autofac都会提供一个新实例.在您的情况下,将在注入时创建新的数据上下文.

Autofac仍然需要处理,但这里存在陷阱.MyDataContext在当前生命周期范围内跟踪每个实例,因此在释放范围之前不会释放它们.

要自己控制处置,您可以使用标记注册ExternallyOwned.您还可以查看Owned<>类型.阅读确定性处置拥有实例.