这更像是一个设计问题,我希望我能清楚地表达我的问题 我有一个复杂的过程,需要记录消息。当编写其中一些日志时,会引发一个事件,我需要对此做出响应。
问题是在此过程中从不同的类调用CreateLog方法,目前我的代码只捕获从第一个类(MyForm)引发的事件。
是否有更好的设计,我可以回应该课程中的所有事件?
希望下面的伪代码可以解释我的问题。
档案1:
Class CreateLog
{
Log Message
Raise event
}
文件2:
Class MyForm
{
private CreateLog _log = new CreateLog();
void StartProcess()
{
Do stuff
Call _log.LogMessage //1
Call MethodB()
Call MethodC()
}
void MethodB()
{
Call _log.LogMessage //2
}
void RespondToEvent
{
//Show Progress on screen
}
}
文件2:
Class AnotherClass
{
void MethodC()
{
_log2.LogMessage() //3
}
}
因此,当我运行它时,nr 1和2的消息日志将触发RespondToEvent()方法,但显然不是nr 3,因为它是CreateLog类的不同实例。 一种解决方案是将_log作为参数传递给MehodC,但这不是最佳解决方案。
除了将所有内容添加到1个类中之外,还有其他任何干净的方法吗?
答案 0 :(得分:1)
您可以向 AnotherClass 添加事件,并在 MethodC 中引发该事件。并在 MyForm 处理事件并调用_log.LogMessage
示例:
Class MyForm
{
//your code
RespondToEventFromAnotherClass() //handles delegateToForm Event from 'AnotherClass'
{
Call _log.LogMessage
}
}
Class AnotherClass
{
Event delegateToForm;
void MethodC()
{
_log2.LogMessages(); // you can Eleminate this line if it is not necessary
Raise Event delegateToForm
}
}