在 WCF 中使用 Unity 将依赖项注入到属性中



我正在尝试编写一个身份验证属性以应用于WCF服务应用程序中的某些服务(使用Unity和Unity.Wcf)。

身份验证

由外部(到服务应用)身份验证接口执行,该接口当前通过构造注入注入到服务类中,并直接在每个服务方法中调用。

这会导致每个服务方法中出现大量重复代码。

相反,我想将其移动到一个属性。

但是,我需要在属性中可以访问身份验证接口。

显然,如果我在属性上使用构造注入,那么在使用属性装饰我的服务方法时,它是一个必需的参数,但此时我无法访问它,因为它是由 Unity 连接的。

如何在属性中注入(或以其他方式访问)身份验证接口?

如果你已经在使用Unity,我会使用Unity的AOP功能。面向方面的编程旨在允许轻松、干燥地实现代码以处理横切问题(如身份验证和授权)。这允许摆脱重复的代码,并将横切关注点与业务逻辑分离。您可以轻松地将依赖项注入到 Unity 创建的方面,因为它们是在运行时从容器解析的(动态拦截)。

要使用 Unity 创建方面,只需实现IInterceptionBehavior接口并将其应用于容器注册期间无需修饰的服务(此处的说明)。

在方面内,您可以轻松读取应用于被截获方法的所有属性,以便您可以将身份验证方案需要满足的角色放在属性中(但没有行为)。

我创建了一个演示解决方案来解释AOP,它使用CastleWindsor而不是Unity,但同样的原则适用。

最新更新