如何防止来自未知插件的方法调用

时间:2011-12-15 23:10:44

标签: c# .net prism

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

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

这适用于棱镜,但我认为适用于任何DI / IoC框架,其中某些方法仅在内部

1 个答案:

答案 0 :(得分:2)

内部使用方法应标记为内部,因此对第三方呼叫者不可见。如果您需要在自己的程序集中共享方法,请使用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")]