Sam*_*dam 12 .net c# dependency-injection postsharp
我只是想了解PostSharp,说实话,我认为这太棒了.
但有一件事我很难在PostSharp方面无法完成纯依赖注入(不是服务定位器),也许是因为编译时编织的结果.
来自PHP背景,Symfony有JMSAopBundle,它仍然允许依赖注入它的拦截器.
.Net是否有一些具有相同功能的库?
或者我错过了PostSharp的东西?
Ste*_*ven 16
我不认为你在这里遗漏任何东西,而且限制确实是使用编译时编织的结果.
虽然我认为编译时编织工具在软件开发中占有一席之地,但我觉得它们经常被过度使用.我经常看到它们被用来修补应用程序设计中的缺陷.在我构建的应用程序中,我将通用接口应用于某些架构概念.例如,我定义:
ICommandHandler<TCommand>为实现某一特定用途的情况下,服务界面;IQueryHandler<TQuery, TResult>用于执行查询的服务的接口;IRepository<TEntity>接口作为存储库的抽象;IValidator<TCommand>用于执行消息验证的组件的接口;这允许我为这样的工件组创建单个通用装饰器(例如TransactionCommandHandlerDecorator<TCommand>,允许在其自己的事务中运行每个用例).装饰器的使用具有许多优点,例如:
关于这种应用程序设计已经写了很多; 以下是我自己撰写的一些文章:
UPDATE
装饰器很棒,但我喜欢AOP的是它的建议和连接点的概念.有没有办法用装饰器模拟相同的功能?我现在只能想到反思.
一个连接点是"其中一个问题是要附加一个类中明确定义的位置".使用装饰器应用AOP时,您将"限制"加入方法边界上的点.但是,如果您遵守SRP,OCP和ISP,您将拥有非常精简的接口(通常使用单一方法).这样做时,您会注意到几乎没有理由在您的班级中的任何其他地方设置加入点.
一个建议是"关注,这将潜在地改变目标方法的输入和/或输出".当使用装饰器和基于消息的设计(我在这里宣传的东西)时,您的建议需要更改消息(或用更改的值替换完整的消息)或更改输出值.事情与代码编织没什么不同 - 如果你应用建议,那么在应用建议的所有代码之间必须有一些共同点.
| 归档时间: |
|
| 查看次数: |
4292 次 |
| 最近记录: |