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

时间:2015-01-22 12:07:36

标签: c# wcf dependency-injection attributes unity-container

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

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

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

相反,我想将其移至属性。

但是,我需要在属性中访问身份验证界面。

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

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

1 个答案:

答案 0 :(得分:0)

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

要创建具有统一性的方面,只需实现IInterceptionBehavior接口并将其应用于容器注册期间不会装饰的服务(说明here)。

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

我创建了一个demo solution来解释AOP,它使用的是CastleWindsor而不是Unity,但适用相同的原则。