0

所以我在运行时加载一个程序集,并且我还根据程序集类型使用泛型。为了获得正确的类型,每个 DLL 都在实现一个我希望在那里的工厂,它用正确的泛型类型实例化类。

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

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

此代码在方法上失败。当我没有管理权限时调用。以我使用它的方式对 MethodInfo.Invoke 的任何调用都需要管理员,这是否正确?我进入了我的 DLL 代码,它甚至没有通过这个调用进入工厂。

编辑:原来有一个没有考虑到的目标 DLL 的依赖关系。我确实喜欢提出的 MEF 框架想法。

4

2 回答 2

3

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

如果您要创建可插拔组件,我建议您查看类似MEF的内容。它已经解决了您面临的问题,并且以一种更好、更快、更易于维护的方式来解决。

于 2010-12-13T20:44:11.637 回答
2

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

于 2010-12-13T20:39:36.940 回答