【问题标题】:Objects not being disposed when using child lifetimescopes使用子生命周期范围时未处理的对象
【发布时间】:2021-08-07 07:01:37
【问题描述】:

我有一个仍在使用 EF6 的 ASP.NET 5 应用程序,我向 Autofac 注册了我的服务,如下所示:

builder.RegisterType<UnitOfWork>()
    .As(typeof(IUnitOfWork))
    .InstancePerDependency();

builder.RegisterAssemblyTypes(assemblies)
    .Where(t => t.FullName.StartsWith("MyApp") && t.Name.EndsWith("Service"))
    .AsImplementedInterfaces()
    .InstancePerDependency();

然后在我正在做的控制器中:

//Save object of type SomeObject
using (var scope = itemScope.BeginLifetimeScope())
{
    var someService = itemScope.Resolve<ISomeService>();
    var savedObject = await someService.SaveAsync(objectToSave);
}

以上在后台线程中循环运行。

最初我没有使用子作用域。但随后,使用诊断工具,我注意到 SomeObject 引用正在增加,并且没有从数据上下文中删除。

所以我决定每次都添加子作用域来拥有新的实例。但这不是问题。它保持原样。

如果我使用的是子作用域,为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: c# entity-framework asp.net-core autofac


    【解决方案1】:

    您仍在使用 itemScope 来解析服务。请注意,scope 根本没有在 using 中使用。

    //Save object of type SomeObject
    using (var scope = itemScope.BeginLifetimeScope())
    {
      //var someService = itemScope.Resolve<ISomeService>();
        var someService = scope.Resolve<ISomeService>();
        var savedObject = await someService.SaveAsync(objectToSave);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多