C# 用“调用方法”;“指纹”;

C# 用“调用方法”;“指纹”;,c#,security,plugins,methods,C#,Security,Plugins,Methods,我想有一些方法来检查调用程序的“指纹”。例如:我得到了一个修改一些值的方法。不应允许第三方类修改值“ID”,但应允许内部类 我不想提交类的类型,这样方法就可以检查该类是否在允许的程序集中。 是否有可能自动提交此类型 或者有其他选择吗?这是因为我的应用程序允许加载项。在一些行动中应该加以限制。出于这个原因,我需要一个非常灵活的系统,它不需要为每个方法添加太多代码或复杂的东西 谢谢为什么不简单地将setter声明为internal呢。这将使成员仅可由程序集中的类访问。嗯,您至少可以使用三个选项 首先

我想有一些方法来检查调用程序的“指纹”。例如:我得到了一个修改一些值的方法。不应允许第三方类修改值“ID”,但应允许内部类

我不想提交类的类型,这样方法就可以检查该类是否在允许的程序集中。 是否有可能自动提交此类型

或者有其他选择吗?这是因为我的应用程序允许加载项。在一些行动中应该加以限制。出于这个原因,我需要一个非常灵活的系统,它不需要为每个方法添加太多代码或复杂的东西


谢谢

为什么不简单地将setter声明为internal呢。这将使成员仅可由程序集中的类访问。

嗯,您至少可以使用三个选项

首先也是最重要的一点是,您需要这些值只能从程序集中修改-这就是关键字提供的内容。如果有多个程序集都需要访问,请考虑使用。要使变量对公众可见但不可修改,可以这样设置:

public SomeType ID { get; internal set; }
第二,尽管它很快变得更加复杂,但您可以使用上面提到的但受保护的集合,并强制用户通过基于方法的系统来修改值,允许您在这些操作期间限制、记录和执行一些逻辑。这不是最简单的方法


第三种是我能想到的最糟糕的解决方案,那就是使用反射来检查调用setter方法的内容。这不仅涉及Get和Set属性中的复杂代码,还可能导致任何为您的系统编写插件的人都会遇到问题,因为他们认为Setter是公共的,即使它有额外的限制。

因为用这种方法,我必须实现各种覆盖方法,这些方法只是稍微修改一下。。。这不会减少我的工作量;)就我而言,第一个和第二个都不适合我。我没有静态对象,所以没有可以设置为内部的setter。它是一个将被创建多次的对象。这是一组值,其中一些值不应更改。我只是想到了一个系统,在那里我检查来电者。我只是想试试。我知道反思是最糟糕的情况。但这是我能够真正安全地检查调用程序是否被授权使用此方法的唯一方法……首先,如果我正确理解第一个问题,任何对象都可以有getter和setter,而不仅仅是statics。第二,如果它是一个集合,您可以自己实现该集合(只需实现IEnumerable,并拥有一个私有的内部集合,您可以将大多数函数传递给它),并让Add和Remove方法检查对象上的内部布尔值,例如IsSecure等。最后,使所述类在其内部集合中使用元组允许您添加权限字段;为特定权限设置一个内部添加重载,现在您可以设置受保护的值shmm,听起来也很难。。。问题是,没有常量值应该是“仅内部”的。它甚至没有指定哪些值(ID)应该为外部用户锁定。这完全是随机的。但有些应该上锁。Setter/Getter不适合这个。。。