如何防止未知添加的方法调用

本文关键字:方法 调用 添加 何防止 未知 | 更新日期: 2023-09-27 18:18:13

我有一个建立在prism之上的核心库(框架),它加载了其他第三方构建的其他模块,这些模块应该使用"推荐"的方法,但是没有内置的机制(据我所知)来防止任何第三方代码使用仅用于内部/核心使用的方法。

是否有一个模式来检查调用代码的汇编,并验证它是否包含一些已知的签名?

这是棱镜,但我想将适用于任何DI/IoC框架,其中某些方法是内部只有

如何防止未知添加的方法调用

内部使用的方法应该被标记为内部的,因此对第三方调用者不可见。如果您需要在您自己的程序集中共享方法,请使用InternalsVisibleToAttribute .

编辑

要使成员对第三方程序集不可用,将成员标记为内部。这将禁止第三方程序集的访问。我提到InternalsVisibleToAttribute是因为

  • 您的内部代码包含多个程序集
  • 你已经将一些成员标记为public以提供汇编间访问,但是你不希望第三方代码访问这些成员。

的例子:

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")]