【问题标题】:How to use autofac inside a parallel.foreach loop如何在 parallel.foreach 循环中使用 autofac
【发布时间】:2019-08-13 18:35:56
【问题描述】:

试图将 foreach 语句更改为 parallel.foreach。使用 autofac。

我的解决方案是我尝试将 AutoFac 添加到的网络表单站点。我遇到问题的课程是使用 Autofac,使用标准 foreach。我想过渡到 Parrallel.foreach。所有示例都显示了一个 container.BeginLIfetimeScope(),但没有关于什么是容器或如何新建容器的信息。

Parallel.ForEach(items, item =>
{
     // Note I'm calling container.BeginLifetimeScope() inside the ForEach
     using (var parallelScope = container.BeginLifetimeScope())
     {
         var aDataService = parallelScope.Resolve<IaDataService>();
         aDataService.SomeProcessing();
     }
 }

【问题讨论】:

  • 附注,但在服务器应用程序中,您可能不应该使用 Parallel.* 方法。
  • 不清楚 - 标题说问题是关于如何在 parallel.foreach 循环中使用它,但问题说它是关于容器是什么以及如何创建它。无论哪个是问题,都应该在问题的标题中。
  • 容器是autofac。这就是为什么问题是如何在 parallel.foreach 中使用 autofac。
  • 你能把问题编辑得更清楚吗?听起来要么 a) 你有 Autofac 的现有代码,但当你把它放在 Parallel 块中时它不起作用,或者 b) 你正在寻找关于如何使用 Autofac 容器的一般建议,或两者兼而有之。如果 (a) 您能否报告您看到的具体错误并包括容器的接线。如果(b),有很多文档值得一读,例如autofaccn.readthedocs.io/en/latest/getting-started/index.html
  • a) 是 b) 是如何在 Parallel 块中使用 Autofac 容器。 a)没有错误,因为我无法编译代码。容器从何而来。 b) 那是这个代码来自。但没有讨论如何在类中获取容器,在 webforms 应用程序中

标签: c# webforms autofac


【解决方案1】:

下面的代码可以编译并为我工作。给定:

public interface IaDataService
{
    void SomeProcessing(object obj);
}

public class DataService : IaDataService
{
    public void SomeProcessing(object obj)
    {

    }
}

我们可以这样做:

var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<DataService>()
    .As<IaDataService>();
var container = containerBuilder.Build();

var items = new List<object>{"abc", 123};
Parallel.ForEach(items, item =>
{
    // Note I'm calling container.BeginLifetimeScope() inside the ForEach
    using (var parallelScope = container.BeginLifetimeScope())
    {
        var aDataService = parallelScope.Resolve<IaDataService>();
        aDataService.SomeProcessing(item);
    }
});

使用 WebForms,您最好使用特定的集成: Autofac WebForms,还有其他关于线程安全的最佳实践问题,为您生成的每个项目生成新范围等。但以上内容应该足以开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多