如何确定哪个 class 在接口上调用了 public 方法?
How can I determine which class called a public method on an interface?
我正在从事一个严重依赖 NServiceBus 的项目。不幸的是,它变得有点混乱,尽管它是用 C# 编写的,但还是有些混乱。例如,我在某处有 Bus.Publish(A)
,然后在其他地方有 public AHandler : IHandleMessages<A>
,这可能没问题,但由于这是一个 P/S 模式,因此通常有多个处理程序。有一些内在需要记住项目,新开发人员很难遵循代码流程。
我对此的解决方案是创建一个控制台应用程序,或者可能是某种 UI,它将使用反射来扫描程序集并为我绘制项目地图。到目前为止,我已经能够有效地获取所有 public class _Handler : IHandleMessages<_>
这很棒,但现在我需要确定消息的来源。
特别是,我想知道是否有一种方法可以使用反射来确定在哪个 classes Bus.Publish(_)
中调用(Bus 实际上是 IBus 的一个实例)。例如,如果 public void Handler(A a) { Bus.Publish(B) }
我想知道传递给 Bus.Publish()
的参数(所以 B)以及包含此处理程序的 class 的名称。
不知道这是否有帮助 - 希望有帮助。
我需要找到对一段代码的调用源 - 审计侦听器,以便我们可以记录用于应用更改的组件。我的代码如下:
Assembly currentAssembly = Assembly.GetExecutingAssembly();
string initialAssembly = new StackTrace().GetFrames()
.Where(x => x.GetMethod().ReflectedType != null)
.Select(x => x.GetMethod().ReflectedType.Assembly).Distinct()
.Where(x => x.GetReferencedAssemblies().Any(y => y.FullName == currentAssembly.FullName))
.Last()
.FullName;
我正在从事一个严重依赖 NServiceBus 的项目。不幸的是,它变得有点混乱,尽管它是用 C# 编写的,但还是有些混乱。例如,我在某处有 Bus.Publish(A)
,然后在其他地方有 public AHandler : IHandleMessages<A>
,这可能没问题,但由于这是一个 P/S 模式,因此通常有多个处理程序。有一些内在需要记住项目,新开发人员很难遵循代码流程。
我对此的解决方案是创建一个控制台应用程序,或者可能是某种 UI,它将使用反射来扫描程序集并为我绘制项目地图。到目前为止,我已经能够有效地获取所有 public class _Handler : IHandleMessages<_>
这很棒,但现在我需要确定消息的来源。
特别是,我想知道是否有一种方法可以使用反射来确定在哪个 classes Bus.Publish(_)
中调用(Bus 实际上是 IBus 的一个实例)。例如,如果 public void Handler(A a) { Bus.Publish(B) }
我想知道传递给 Bus.Publish()
的参数(所以 B)以及包含此处理程序的 class 的名称。
不知道这是否有帮助 - 希望有帮助。
我需要找到对一段代码的调用源 - 审计侦听器,以便我们可以记录用于应用更改的组件。我的代码如下:
Assembly currentAssembly = Assembly.GetExecutingAssembly();
string initialAssembly = new StackTrace().GetFrames()
.Where(x => x.GetMethod().ReflectedType != null)
.Select(x => x.GetMethod().ReflectedType.Assembly).Distinct()
.Where(x => x.GetReferencedAssemblies().Any(y => y.FullName == currentAssembly.FullName))
.Last()
.FullName;