我正在尝试编写身份验证属性以应用于WCF服务应用程序中的某些服务(使用Unity和Unity.Wcf)。
身份验证由外部(到服务应用程序)身份验证接口执行,该接口当前通过构造注入注入到服务类中,并直接在每个服务方法中调用。
这会导致每种服务方法中出现大量重复的代码。
相反,我想将其移至属性。
但是,我需要在属性中访问身份验证界面。
显然,如果我在属性上使用构造注入,那么在使用属性装饰我的服务方法时它就是一个必需参数,但此时我无法访问它,因为它是由Unity连接的。
如何在属性中注入(或以其他方式访问)身份验证界面?
答案 0 :(得分:0)
如果您已经在使用Unity,我会使用Unity的AOP功能。面向方面编程旨在允许简单,干燥的代码实现来处理跨领域的问题(如身份验证和授权)。这样可以摆脱重复的代码,并将交叉问题与业务逻辑分离开来。您可以轻松地将依赖项注入使用Unity创建的方面,因为它们是在运行时从容器中解析出来的(动态拦截)。
要创建具有统一性的方面,只需实现IInterceptionBehavior
接口并将其应用于容器注册期间不会装饰的服务(说明here)。
在方面内部,您可以轻松读取应用于被拦截方法的所有属性,以便您可以在属性中放置您需要满足身份验证方案的角色(但没有行为)。
我创建了一个demo solution来解释AOP,它使用的是CastleWindsor而不是Unity,但适用相同的原则。