我在 Prism 之上构建了一组核心库(框架),它加载了其他第 3 方构建的其他模块,这些模块应该使用“推荐”方法,但没有内置机制(据我所知)防止任何第三方代码使用仅供内部/核心使用的方法。
是否有一种模式可以检查调用代码的汇编并验证它是否包含一些已知的签名?
这是针对 prism 的,但我想它适用于任何 DI/IoC 框架,其中某些方法仅供内部使用
最佳答案
内部使用的方法应该被标记为内部的,因此对第三方调用者是不可见的。如果您需要在自己的程序集中共享方法,请使用 InternalsVisibleToAttribute
。
编辑
要使成员对第三方程序集不可用,请将成员标记为内部。这禁止第三方程序集访问。我提到 InternalsVisibleToAttribute
是因为有可能
- 您的内部代码包含多个程序集
- 您已将某些成员标记为公开以提供程序集间访问,但您不希望第三方代码访问这些成员。
例子:
MyAssemblyA 的代码:
public static class SomeClass
{
//this method is public because I want to be able to use it in MyAssemblyB
public static void SomeMethodThatShouldBeInternal()
{
}
}
我的 MyAssemblyB 的代码:
public class Program
{
public static void Main()
{
SomeClass.SomeMethodThatShouldBeInternal();
}
}
要防止第三方代码访问 SomeMethodThatShouldBeInternal()
,请更改声明:
public static class SomeClass
{
internal static void SomeMethodThatShouldBeInternal()
{
}
}
现在,MyAssemblyB 将无法编译!但是,您可以通过将此属性添加到 MyAssemblyA 来解决此问题:
[assembly: InternalsVisibleTo("MyAssemblyB")]
关于c# - 如何防止来自未知插件的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527902/