4

为什么不能将 PrincipalPermission 放在服务合同接口上是否有技术原因?它仅适用于实现合同的类或直接适用于类方法。

这行不通。

[ServiceContract]
public interface IMyService
{
    [PrincipalPermission(SecurityAction.Demand, Role="Admin")]
    [OperationContract]
    void MyFunction(string str);
}

但是,如果我将属性放在实现 IMyService 的类中的匹配方法上,它就会起作用。

4

2 回答 2

3

在运行时检查角色,使用实现方法上的属性,而不是方法实现的接口上的属性。更一般地,在 .NET 中,放置在方法上的自定义属性与放置在相应接口方法上的自定义属性(如果有)之间没有直接关系。

于 2012-11-22T17:38:05.297 回答
1

我知道这篇文章已经过时,试图为 OPs 问题提供一个具体的答案,原因在于接口和类之间的区别。

想想看;接口是对实现的描述,它不是实现的行为。 接口仅描述类方法和事件等。

或者正如微软所说:

接口定义了实现者必须提供的一组成员的签名。接口不能为成员提供实现细节(行为)

继承接口的类提供这些方法和事件的行为。——也就是说实现了接口的【行为~功能】

那么为什么接口:

如果您需要提供值类型的多态层次结构,请定义一个接口。

考虑定义接口以达到类似于多重继承的效果。

https://msdn.microsoft.com/library/ms229013(v=vs.100).aspx

希望这有助于其他人理解。

于 2015-11-19T19:12:34.977 回答