Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过反射(C#)到达其他子库_C#_C# 4.0_Reflection_System.reflection - Fatal编程技术网

通过反射(C#)到达其他子库

通过反射(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中的类的

我有一个VisualStudio解决方案,其中包含三个C#项目,每个项目都编译成三个不同的DLL。让我们调用主逻辑。另外两个是可选的,可以包含在其他应用程序中,也可以不包含在其他应用程序中,但必须包含主DLL。让我们调用另外两个
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
可以订阅活动,他们彼此都不需要了解任何信息。感谢您的反馈。我是按照这些思路思考的,但不喜欢在逻辑库中引入不属于那里的代码,但我想你是对的——我没有以正确的方式来实现这一点。