gpt4 book ai didi

autofac - InstancePerLifeTimeScope 和对象的生命周期

转载 作者:行者123 更新时间:2023-12-01 16:13:47 37 4
gpt4 key购买 nike

我对 Autofac 依赖注入(inject)非常陌生,我收到了与我的项目相关的这些问题。我已经阅读了很多文章,但对于我遇到的一些问题并没有得到清晰的了解。我的是.Net REST API 上的服务应用程序。我正在 App_Start 模块中进行实例注册,如下所示。

private static IContainer RegisterServices(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<DCLMessengerContext>()
.As<DbContext>()
.ExternallyOwned()
.InstancePerLifetimeScope();
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.ExternallyOwned()
.InstancePerLifetimeScope();
builder.RegisterType<UnitOfWork>()
.As<IUnitOfWork>()
.InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(EntityBaseRepository<>))
.As(typeof(IEntityBaseRepository<>))
.InstancePerLifetimeScope();
builder.RegisterType<PersonServiceClient>()
.As<IPerfService>()
.InstancePerLifetimeScope();
builder.RegisterType<PagingServiceContractClient>()
.As<PagingServiceContract>()
.InstancePerLifetimeScope();
builder.RegisterType<MessageService>()
.As<IMessageService>()
.InstancePerLifetimeScope();
Container = builder.Build();
return Container;

}

我的服务层是“MessageService”,我在那里执行所有数据库和其他集成操作,并通过构造函数注入(inject)获取实例。这些是我对这个实现的疑问。

  1. 我正在使用 InstancePerLifeTimeScope 进行所有注册。这是正确的方法吗?每个 Controller 请求(http请求)生命周期结束后,这些实例会被自动处置吗?
  2. 我们是否需要在这些实例上手动实现任何Dispose操作? (我的代码中没有任何非托管对象)
  3. 在服务方法中,我还需要使用 Task.Run() 创建一个即发即忘线程。向该即发即忘线程提供实例的最佳方法是什么?如果我使用 InstancePerLifeTimeScope,我可以看到新线程也获取通过服务类提供的相同实例,所以我只是很困惑这些实例何时会被释放?

最佳答案

When you resolve the instance per lifetime scope component, you get a single instance per nested scope

  1. 如果您在 Controller 中使用它们。每个请求都会有一个对象,并且它们将被处理。但是,如果您在单例对象中解析它们,它们将与该对象一起存在。

Is this is the right approach?

这取决于你需要什么。如果您需要单例对象,则不是。如果您只想在请求范围内使用此服务,则使用instanceperrequest 会更好。

  • Autofac 自动为 IDisposable 对象调用 dispose。如果你需要dispose方法,实现它。与autofac无关。
  • 如果使用另一个线程解析此线程中的对象。否则,当请求被处置时,您的对象将被处置并且您的线程将失败。检查this .
  • 关于autofac - InstancePerLifeTimeScope 和对象的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213127/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com