C# PostSharp的任何免费替代方案
我们正在构建的应用程序定期发送不同类型的电子邮件。我将电子邮件模板存储在Azure blob存储中,负责发送电子邮件的方法从中提取相应的电子邮件模板。我希望模板位于托管服务之外,如果我想更新它,我只需将新模板上传到blob即可 从性能和成本的角度来看,我遇到的问题是,电子邮件模板在24小时内很少更改。因此,在ASP.NET MVC中以类似于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”)]的方式缓存该方法将是提高工作者角色性能的理想解决方案。如何做
[OutputCache(Duration=Duration,VaryByParam=“id”)]
的方式缓存该方法将是提高工作者角色性能的理想解决方案。如何做到这一点现在是一个问题。我知道了,但我们的预算从一开始就没有考虑PostSharp的许可费
还有其他免费的选择吗?感谢您的帮助。您是否考虑过使用将模板从存储中取出?您可以在的运行方法中配置间隔
[更新]
上面我可能不清楚。模板应存储在Blob存储中。本地存储将用于在服务的每个实例上本地缓存模板的副本。如果您将ETag存储在单独的文件中,这将允许您在传输blob之前验证模板是否已更改,即:
- 欢迎光临
- welcome.tag.tpl
[/Update]我过去使用以下组合实现了方法级缓存:
现在,关于实际的缓存,您可以利用.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,最佳开源替代方案: