2012-10-27 109 views
0

我试图找出是否可以设置自定义属性来确定方法调用是否可以处理。我想要的与我在MVC3应用程序中使用的[Authorize()]属性类似。自定义属性,以确定方法是否可以处理

基本上,我有一个COM对象,我正在连接(第三方DMS软件),并且我想确保用户在处理该方法的内容之前没有关闭该程序。我可以将呼叫打包在try/catch中,或者我可以包装一个检查application.running的方法,但我喜欢属性功能和简单标记(如果需要的话)。

到目前为止,我发现的所有教程/文档都是如何标记具有属性的方法/类(它们通常在教程中使用字符串),然后在代码中访问这些字符串值。


这只是我不想做的事情,如果可能的话。再次,在MVC3/4,你可以做...

[Authorize()] 
public class ControllerClass : Controller { 
    public ActionResult Index(){ return View(); } 
    ....etc.... 
} 

在这个例子中指数总是要被别人,通过Authorize调用。我不确定的是,如果这是实例化类或调用方法所必需的。

因此,毕竟我的问题很简单。可以为C#WinForms库实现类似于Authorize()的东西吗?

回答

2

是的,你可以通过AOP框架如PostSharp来实现它。示例:

[Serializable] 
public class LogAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionArgs args) 
    { 
     if (!application.running) 
      throw new Exception(String.Format("Method {0} is not allowed to call when application is not running.", args.Method.Name)); 
    } 
} 
+0

看起来像PostSharp有一些许可成本我会看看我是否找不到另一个开源的AOP框架。感谢您指向aop,尽管如果我找到东西我会回复 – Jared

+0

@Jared看起来像Method和Property方面可用于初学者版本的商业用途。 http://www.sharpcrafters.com/purchase/compare –

+0

是的,我看到了,但它特别是我想要摆脱的。现在我可以简单地做一个'if(!application.running)return; //或者根据方法返回一些东西。我希望摆脱对每种方法的调用或注释的需求。这是一件小事,但我感兴趣的东西。 – Jared

相关问题