C# PostSharp的任何免费替代方案

C# PostSharp的任何免费替代方案,c#,asp.net-mvc,caching,azure,C#,Asp.net Mvc,Caching,Azure,我们正在构建的应用程序定期发送不同类型的电子邮件。我将电子邮件模板存储在Azure blob存储中,负责发送电子邮件的方法从中提取相应的电子邮件模板。我希望模板位于托管服务之外,如果我想更新它,我只需将新模板上传到blob即可 从性能和成本的角度来看,我遇到的问题是,电子邮件模板在24小时内很少更改。因此,在ASP.NET MVC中以类似于[OutputCache(Duration=Duration,VaryByParam=“id”)]的方式缓存该方法将是提高工作者角色性能的理想解决方案。如何做

我们正在构建的应用程序定期发送不同类型的电子邮件。我将电子邮件模板存储在Azure blob存储中,负责发送电子邮件的方法从中提取相应的电子邮件模板。我希望模板位于托管服务之外,如果我想更新它,我只需将新模板上传到blob即可

从性能和成本的角度来看,我遇到的问题是,电子邮件模板在24小时内很少更改。因此,在ASP.NET MVC中以类似于
[OutputCache(Duration=Duration,VaryByParam=“id”)]
的方式缓存该方法将是提高工作者角色性能的理想解决方案。如何做到这一点现在是一个问题。我知道了,但我们的预算从一开始就没有考虑PostSharp的许可费

还有其他免费的选择吗?感谢您的帮助。

您是否考虑过使用将模板从存储中取出?您可以在的运行方法中配置间隔

[更新]

上面我可能不清楚。模板应存储在Blob存储中。本地存储将用于在服务的每个实例上本地缓存模板的副本。如果您将ETag存储在单独的文件中,这将允许您在传输blob之前验证模板是否已更改,即:

  • 欢迎光临
  • welcome.tag.tpl
在RoleEntryPoint中,从*.tag.tpl文件中读取etag。提交对blob存储的请求,通过Etag,如果没有匹配的访问条件,则通过。如果blob尚未更新,它将返回一个HTTP 304 Not Modified响应代码,如果它已更新,blob将被下载


[/Update]

我过去使用以下组合实现了方法级缓存:

  • 作为IoC容器
  • Autofac软件包
  • Autofac的拦截支持集成
  • 用于修饰需要缓存支持的类的自定义属性
  • 用于添加方法级缓存的自定义拦截器
  • 自定义属性和拦截器非常容易设置。我认为,方法级缓存的主要问题是,如何以最佳但精确的方式确定缓存命中和未命中

    在我的例子中,它需要是泛型的(支持任何类型的方法调用和参数),因此我必须创建一种灵活的方法来散列所有方法参数值,以便区分一个调用和另一个调用。但在您的例子中,这实际上可能是一个非常特定的拦截器,它已经知道您的方法调用的结构,这将使事情变得更容易


    现在,关于实际的缓存,您可以利用.NET的缓存支持,该支持位于
    System.Runtime.caching
    名称空间中,该名称空间已经提供了一个if(如果适用)。

    我已经使用过几次了。它是免费的,并且非常容易安装和使用许多IoC容器

    PostSharp Starter Edition是免费的,可以满足您的要求。

    如果您只需要AOP功能,可以使用Ninject拦截之类的功能


    您可以尝试使用KingAOP-轻松完成此类任务。主要区别在于:
    1) 在运行时生成代码而不浪费额外的编译时间。
    2) 基于“动态”——这意味着您的代码将通过官方C#编译器生成。

    这是一个开源项目:

    查看文章:

    我可能遗漏了什么,所以我会问“为什么你认为postsharp会帮助你解决这个问题?”有一条线索建议postsharp是可行的选择。我已经搜过网了。如果您有其他选择,我将不胜感激。好的,我现在知道了-您想将其用于AOP;您的缓存逻辑是您的“交叉关注点”。是的,PostSharp可能是一个可行的解决方案。然而,我不知道有任何免费软件的替代品。让我再看看。似乎你可以通过一些巧妙的使用Mono.Cecil来达到相同的最终结果,但我无法证实这一点,因此没有答案-但需要调查一下?Postsharp确实有一个免费版本,你尝试过吗?谢谢。我想当需要更新/更改模板时,如果选择本地存储,我们将不得不重新部署应用程序。我们试图避免这种情况。将模板存储在blob存储中,但让RoleEntryPoint保持本地存储中的缓存副本最新。对blob存储中的模板所做的任何更新都将在线程在Run方法中唤醒并且执行代码以覆盖localstorage中的副本时立即更新。谢谢。看看吧。另一个替代方案是受postsharp启发的复合面向方面框架。它是在每个项目最多10个类的限制之前。我正在尝试创建一个基于MrAdvice的postsharp替代方案。也许你可以试一试。您可以使用MrAdvice.Sharp,请毫不犹豫地向我发送一些反馈。记住fody,最佳开源替代方案: