通过反射(C#)到达其他子库
我有一个VisualStudio解决方案,其中包含三个C#项目,每个项目都编译成三个不同的DLL。让我们调用主逻辑。另外两个是可选的,可以包含在其他应用程序中,也可以不包含在其他应用程序中,但必须包含主DLL。让我们调用另外两个通过反射(C#)到达其他子库,c#,c#-4.0,reflection,system.reflection,C#,C# 4.0,Reflection,System.reflection,我有一个VisualStudio解决方案,其中包含三个C#项目,每个项目都编译成三个不同的DLL。让我们调用主逻辑。另外两个是可选的,可以包含在其他应用程序中,也可以不包含在其他应用程序中,但必须包含主DLL。让我们调用另外两个Logic.Editor和Logic.OptionalLogic。它们都依赖于主DLL逻辑 这就是我想要的架构,因为通常Logic.Editor和Logic.OptionalLogic不通信。现在,我遇到了这样一种情况:如果在Logic.OptionalLogic中的类的
Logic.Editor
和Logic.OptionalLogic
。它们都依赖于主DLL逻辑
这就是我想要的架构,因为通常Logic.Editor
和Logic.OptionalLogic
不通信。现在,我遇到了这样一种情况:如果在Logic.OptionalLogic
中的类的实例中发生了什么,我想在Logic.Editor.EditorWindow
中调用一个静态方法,以确认发生了什么。原始库逻辑
对事件根本不感兴趣
我想我会使用反射,但我发现的大多数示例都需要访问实际的库/程序集/命名空间和/或类,以便能够从类型中提取方法。比如说
System.Reflection.Assembly.GetAssembly(System.Type type);
需要无法访问的程序集类型,以及
System.Type.GetType("Logic.Editor.EditorWindow");
返回null,可能是因为找不到Logic.Editor
,所以我无法对其调用GetMethod
是否可以通过反射从程序集中的类中检索静态方法(除了已知字符串之外,我根本无法访问该方法),并在找到该方法时(如果最终项目中包含另一个程序集)选择性地调用该方法
我仅限于C#4和.NET 3.5。您可以在逻辑中定义一个,在逻辑编辑器中实现它,并在逻辑.OptionalLogic中调用它。如果Logic.OptionalLogic
没有设置委托,则不要调用它。严重错误的方法IMHO。由于Logic.OptionalLogic
与Logic.Editor
之间存在某种依赖关系,因此直接从前者引用后者。如果真的有什么原因想让它们完全分开,那么在逻辑中实现一些开放式消息中心(即使是非常简单的消息中心)。然后,Logic.OptionalLogic
可以通知订阅者,Logic.Editor
可以订阅活动,他们彼此都不需要了解任何信息。感谢您的反馈。我是按照这些思路思考的,但不喜欢在逻辑库中引入不属于那里的代码,但我想你是对的——我没有以正确的方式来实现这一点。