使用ASP.NET Core中的Autofac注册应用程序生命周期范围服务

时间:2016-07-08 13:37:33

标签: c# asp.net-core autofac

根据Autofac documentationContainerBuilder中的ConfigureServices()已经是请求范围的:

  

使用InstancePerLifetimeScope代替InstancePerRequest。 [...]随着Microsoft.Extensions.DependencyInjection的引入,每个请求和其他子生命周期范围的创建现在是框架提供的符合容器的一部分,因此所有子生命周期范围都被平等对待 - 没有特殊之处“请求级别范围”了。

这使得请求生命周期范围服务的注册更容易,但如何将服务注册为应用程序生命周期范围?

上下文/示例

我们提供一些服务,提供在整个应用程序生命周期内不会发生变化的信息,例如AutoMapper配置文件。其中一些是实例化的计算密集型,所以我真的只想在应用程序启动时实例化它们,而不是每个请求。

2 个答案:

答案 0 :(得分:1)

您可以使用var words = (from w in db.Words join wf in db.WordForms on w.WordId equals wf.WordId into wwf from x in wwf.DefaultIfEmpty() where x == null select w) .AsNoTracking() .ToList(); 方法将组件创建为单例。 如果要在应用程序启动时实例化它们,可以让组件实现SingleInstance或使用IStartable方法注册它们:

AutoActivate

有关详细信息,请参阅Instance scope - single instanceRunning code at startup

答案 1 :(得分:0)

作为@ Cyril答案的替代方案,您可以使用内置容器注册服务。当您调用Autofac的Populate方法时,它将使用应用程序范围注册服务。

services.AddSingleton<IMyService, MyService>();