C语言中不同类库与另一个类库的触发方法#

Trigger method of different class library from another class library in C#

提问人:Nishan Dhungana 提问时间:6/30/2023 最后编辑:djvNishan Dhungana 更新时间:6/30/2023 访问量:57

问:

我有一个两类库 A 和 B。A 是用 VB 编写的,B 是用 C 编写的#

A 的引用为 B。因此,我无法在 A 类库上实例化 B 的方法。

现在我有一个场景,如果执行了 B 库的某个方法,那么也应该执行 A 库的某些方法。 请注意,这里我无法在 B 中调用 A 的方法,因为 B 已经在 A 中被引用。

我试图为此进行委托,但似乎不起作用

这是到目前为止尝试过的(这是从 ChatGPT 生成的代码,但不起作用)

public delegate void MethodExecutedEventHandler();

public class ClassB
{
    public event MethodExecutedEventHandler MethodExecuted;

    public void SomeMethod()
    {
        // Method logic here...

        // Raise the event when the method is executed
        MethodExecuted?.Invoke();
    }
}

在A面

Public Class ClassA
    Private WithEvents b As New ClassB()

    Private Sub OnMethodExecuted() Handles b.MethodExecuted
        ' Method logic to be executed when the method in class B is executed
    End Sub
End Class

SomeMethod的 ClassB 由作业每分钟自动执行一次。所以当方法被执行时,我希望ClassA也被执行。SomeMethodOnMethodExecuted

可以做到吗?
如果是这样,我该怎么做?

C# vb.net 类库

评论

2赞 MakePeaceGreatAgain 6/30/2023
所以你在 A 和 B 之间有一些循环依赖关系,对吧?你能把它提取到一个 A 和 B 都依赖的公共库中吗?当然,您可以使用委托。但你可能需要重新考虑你的班级结构。
0赞 Nishan Dhungana 6/30/2023
我尝试制作另一个类库,您能否举例说明如何从另一个类库实现这种方法
3赞 Jon Skeet 6/30/2023
“ClassB 的 SomeMethod 每分钟都由作业自动调用”——但是在哪个 ClassB 实例中?我的猜测是它不是在 ClassA 中创建的实例。
4赞 Jon Skeet 6/30/2023
那么 Quartz 是否正在创建 ClassB 的实例?ClassB 的该实例无法知道在 ClassA 中创建的实例,因此它没有将其事件处理程序配置为调用 ClassA 中的方法。如果你能改变一些东西,让 Quartz 使用 ClassA 创建的 ClassB 实例,那么应该可以解决问题。(我不熟悉 Quartz,所以不能说怎么做。值得注意的是,这种脱节并不是因为你使用了多种语言,甚至你使用了两个项目。
3赞 Jon Skeet 6/30/2023
“ClassB 的实例位于 ClassA 中。”我知道 ClassA 中有一个 ClassB 实例 - 但我强烈怀疑这不是 Quartz 使用的 ClassB 实例。是的,我知道你有两个项目,一个是 VB 项目,一个是 C# 项目——我是说这并不重要。与此相关的是,执行该方法(通过 Quartz)的 ClassB 实例必须是配置为调用 ClassA 中的方法的实例。理解这一点非常重要。

答: 暂无答案