因此,我在运行时加载了一个组件,并且我还使用仿制药,具体取决于装配类型。为了获得正确的类型,每个DLL正在实现我希望在那里使用正确的通用类型实例化的工厂。

            Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory");
            MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static);

            player = (IScenarioPlayer)method.Invoke(null, null);

该代码在方法上失败。当我没有管理特权时,涉及。对MethodInfo的任何调用是正确的。我介入了DLL的代码,甚至还没有通过此通话进入工厂。

编辑:事实证明,目标dll的依赖性未考虑。我确实喜欢提出的MEF框架想法。

有帮助吗?

解决方案

这与MethodInfo无关,而是MethodInfo最有可能做的事情。您可以通过调用有关方法并查看它是否在非管理环境中工作来测试此问题。

其他提示

在您使用的方式中,使用反射来解决在运行时创建工厂的问题是一个坏主意。你不仅是 不是 避免耦合(您已经有一个硬编码的字符串引用了一种类型),您正在打开一个受伤的世界。这些东西都没有大量键入。

我建议看类似的东西 MEF 如果您想创建可插入的组件。它已经解决了您面临的问题 是以更好,更快,更可维护的方式做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top