C#在对象之间发送、接收和重定向字符串消息
我有一个主类“Template”,它引用了一些处理器“IProcessor”C#在对象之间发送、接收和重定向字符串消息,c#,C#,我有一个主类“Template”,它引用了一些处理器“IProcessor” interface IProcessor { void Execute(); } class Template { IProcessor proc1; IProcessor proc2; IProcessor proc3; public Template(IProcessor p1, IProcessor p2, IProcessor p3) { p
interface IProcessor
{
void Execute();
}
class Template
{
IProcessor proc1;
IProcessor proc2;
IProcessor proc3;
public Template(IProcessor p1, IProcessor p2, IProcessor p3)
{
proc1 = p1;
proc2 = p2;
proc3 = p3;
}
public void Run()
{
proc1.Execute();
proc2.Execute();
proc3.Execute();
}
}
每个处理器都需要能够向“模板”类发送字符串消息Template类需要能够将消息重定向到其他对象(可能是Logger或UI)
问题在于“Template”的Run方法()可以在单独的线程中启动,而IProcessor中的消息可以并行生成。Foreach循环。我的决定被整合到生产者/消费者模式实现中,其中使用了BlockingCollection,但我觉得这对于我的问题来说太昂贵了,而且在将到达的消息重定向到其他对象时也有困难。这个问题有标准的解决方案吗?(事件、委托或其他?您已经提到了一些可能的解决方案:将委托传递给将字符串检索到处理器的方法;当新消息准备就绪时,在处理器中引发事件;让
Template
实现一个接口并将其传递给处理器。最合适的解决方案取决于您的体系结构。为什么您认为使用BlockingCollection会过于繁重,这似乎是自然的解决方案?此外,你所说的“困难”是什么?您需要在某个地方进行一些同步,而阻塞集合是“隐藏”它的好地方。:)收集字符串是一个常见的领域,因此是一个关键部分。我无法理解问题的复杂性。如果您的模板
需要来自i处理器
的消息,那么为什么不将void Execute
更改为string Execute
或需要传回的任何对象。消息在Execute()方法内部并行生成。Foreach循环,因此我不需要string Execute()。生成的消息被发送到模板,然后重定向到其他对象。