Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果使用IOC容器,在.net中使用线程池是否违反了(粗略地说)规则?_C#_.net_Inversion Of Control - Fatal编程技术网

C# 如果使用IOC容器,在.net中使用线程池是否违反了(粗略地说)规则?

C# 如果使用IOC容器,在.net中使用线程池是否违反了(粗略地说)规则?,c#,.net,inversion-of-control,C#,.net,Inversion Of Control,我喜欢控制反转(IOC)模式,并经常使用它。像往常一样,我对线程以及它们在.NET的OO生态圈中的位置有问题 我曾考虑在.Net中使用线程和“内置”线程池类,并意识到它与您的代码在一个完全不同的级别上运行,对于Unity等IOC容器,它超出了IOC模式的范围 我不知道在IOC领域中有多少线程会存在,但如果可以将其视为一个类,那么它可能是包含在IOC框架中的候选线程。如果是这种情况,您将如何处理线程池的使用 这个评估是否正确。线程和IoC没有太多共同点。无论是否涉及螺纹,都可能发生松耦合。尝试为T

我喜欢控制反转(IOC)模式,并经常使用它。像往常一样,我对线程以及它们在.NET的OO生态圈中的位置有问题

我曾考虑在.Net中使用线程和“内置”线程池类,并意识到它与您的代码在一个完全不同的级别上运行,对于Unity等IOC容器,它超出了IOC模式的范围

我不知道在IOC领域中有多少线程会存在,但如果可以将其视为一个类,那么它可能是包含在IOC框架中的候选线程。如果是这种情况,您将如何处理线程池的使用


这个评估是否正确。

线程和IoC没有太多共同点。无论是否涉及螺纹,都可能发生松耦合。尝试为Thread类提供接口是可能的,但是您不会抽象掉其他.NET framework类,是吗

以一个将以某种形式公开数据的服务为例。如果服务决定通过线程化提供异步行为,消费者将不得不考虑这一点。打电话给这项服务仍属于国际奥委会的职权范围


通过将服务作为接口公开,它可以根据需要进行更改,同时仍然提供所需的行为,在本例中,该行为将是异步行为。这将允许您在数据准备就绪后在接口中定义方法和回调/事件,同时仍然使用Unity和其他IoC框架。

线程化和IoC没有太多共同点。无论是否涉及螺纹,都可能发生松耦合。尝试为Thread类提供接口是可能的,但是您不会抽象掉其他.NET framework类,是吗

以一个将以某种形式公开数据的服务为例。如果服务决定通过线程化提供异步行为,消费者将不得不考虑这一点。打电话给这项服务仍属于国际奥委会的职权范围


通过将服务作为接口公开,它可以根据需要进行更改,同时仍然提供所需的行为,在本例中,该行为将是异步行为。这将允许您在数据准备好后在接口中定义方法和回调/事件,同时仍然使用Unity和其他IoC框架。

首先,我实际上从未直接使用
线程池,而是通过IoC容器解析接口
IThreadPoolService
。这对于单元测试逻辑非常有用,因为线程方面会使事情变得更加困难,但不会给测试方面增加任何东西。我可以用非线程测试版本模拟服务

我不认为使用
ThreadPool
违反了IoC,因为
ThreadPool
实际上并不控制任务本身,它只负责调用入口点。它也不是“创造性的”,这是IoC容器的一个核心方面


使用IoC容器解析IThreadPoolService提供了添加间接层的常见好处,例如,您可以更改实现并添加其他行为,例如日志记录,当然可以通过IoC\DI支持这些行为。

首先,我实际上从未直接使用
线程池,但是有一个接口
IThreadPoolService
,我通过IoC容器解析它。这对于单元测试逻辑非常有用,因为线程方面会使事情变得更加困难,但不会给测试方面增加任何东西。我可以用非线程测试版本模拟服务

我不认为使用
ThreadPool
违反了IoC,因为
ThreadPool
实际上并不控制任务本身,它只负责调用入口点。它也不是“创造性的”,这是IoC容器的一个核心方面


使用IoC容器解析
IThreadPoolService
提供了添加间接层的常见好处,例如,您可以更改实现并添加其他行为,例如日志记录,当然可以通过IoC\DI支持这些行为。

我同意线程类和IoC没有任何共同之处,但是我认为,线程池和实现自己的线程池模型的IOC可能存在利益冲突。@我不确定我是否这样认为。线程池只是框架的一部分。这又回到了询问您如何处理框架的其他部分?你有电话吗?当然不是。提供利用ThreadPool的服务是可以理解的,但是ThreadPool如何以任何方式与IoC概念相联系,而不是与任何其他结构相联系,这并不一定会影响IMHO。内置的配置类和所有其他无数静态类型的类也很好,比如文件等等。我想这是一个糟糕的代码,而且会有点味道。我认为同样,使用ThreadPool并不明确,这意味着你不能用更好/同等的东西代替它,这是IOC的另一项建议。我同意Thread Class和IOC没有任何共同之处,但是我认为,线程池和实现自己的线程池模型的IOC可能存在利益冲突。@我不确定我是否这样认为。线程池只是框架的一部分。这又回到了询问您如何处理框架的其他部分?你有电话吗?当然不是。提供一个利用线程池的服务是可以理解的,但是线程池如何以任何方式与IoC概念相联系,而不是与任何其他结构相联系,这并不一定会影响IMHO。内置的配置类和所有其他无数静态类型的类也可以,比如文件等。IMHO我会