【发布时间】:2010-10-08 08:25:20
【问题描述】:
有没有办法在方法上有扩展方法?这方面的示例是将一些用户对象作为参数的方法,您需要进行安全检查,如果该用户可以在方法的最开始使用该方法。该方法是否可以具有扩展方法,例如“检查此用户是否可以使用我”并返回布尔值。
谢谢。
【问题讨论】:
标签: c# methods extension-methods
有没有办法在方法上有扩展方法?这方面的示例是将一些用户对象作为参数的方法,您需要进行安全检查,如果该用户可以在方法的最开始使用该方法。该方法是否可以具有扩展方法,例如“检查此用户是否可以使用我”并返回布尔值。
谢谢。
【问题讨论】:
标签: c# methods extension-methods
您可以使用Aspect Oriented Programming (AOP) 在您的代码中实施横切安全检查。
在 .NET 中,您可以选择多种 AOP 框架,例如:
特别是 PostSharp 文档有 some nice examples on how to implement security using AOP。
【讨论】:
您不能为使用 C# 的方法添加扩展方法。
但您可以使用Aspect Oriented Programming (AOP) 来做您想做的事情,例如使用PostSharp 或Spring.NET。
Example of securing methods with PostSharp
public class BusinessDivision : BusinessObject
{
[SecuredOperation("Manager")]
public void EnlistEmployee(Employee employee)
{
// Details omitted.
}
}
【讨论】:
我不太确定您在寻找什么,但这对我来说就像声明式安全。
【讨论】:
我不确定我是否理解你的问题。但是,这个呢:
public static void EnsureUserHasAccess(this object obj)
{
// check permissions, possibly depending on `obj`'s actual type
}
public static void DoSomething(this MyClass obj)
{
// permissions check
obj.EnsureUserHasAccess();
// do something about `obj`
…
}
public static void DoSomethingElse(this MyDifferentClass obj)
{
// permissions check
obj.EnsureUserHasAccess();
// do something about `obj`
…
}
【讨论】:
C# 中的Extension methods 不是方法的扩展(我不确定我理解这意味着什么),而是扩展对象/类的方法。
【讨论】:
您可以使用 madgnome 的答案,它基于方面编程(很高兴看到有人在 .net 中使用它),或者您可以使用属性并在每个应该保护的方法中粘贴一些代码。
【讨论】: