c# - 在 WCF 中使用 Unity 将依赖项注入(inject)属性

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

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

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

这导致在每个服务方法中有很多重复的代码。

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

但是,我需要在属性中访问身份验证接口(interface)。

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

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

最佳答案

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

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

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

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

关于c# - 在 WCF 中使用 Unity 将依赖项注入(inject)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088393/

相关文章:

asp.net-mvc - ASP.NET MVC 推荐的依赖注入(inject)框架是什么

asp.net-core - 如何在 AspNet.Core 2.1 中通过依赖注入(inject)添加 UserManager?

c# - Process.Start 找不到可执行文件

c# - 如何将具有循环引用的对象结构序列化为 Json?

WCF 服务,相同的合约,但某些数据成员特定于客户端

wcf - 什么是好的 WCF/Web 服务安全读物?

c# - 使用依赖注入(inject)将字典保存在应用程序中的位置

c# - 将 foreach 循环更改为 LINQ 查询

c# - 了解SignalR的加载过程

Java 和 C# 二进制字符格式差异