是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的过程来实例化服务?(另外,考虑到容器的类型的生活方式配置和服务的 InstanceContextBehavior 之间的潜在冲突,这种方法会是一个糟糕的主意吗?)
我知道我可能完全问错了问题。我的目标是通过容器提供的方法拦截工具实现 AOP 方法(例如,方法进入/退出日志记录、性能计数和调用限制,所有这些都涉及我不想插入到我的服务实现中的逻辑和依赖项)。我想 WCF 提供了其他方法来解决这个问题,所以我也很想听听其他推荐的方法。
是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的过程来实例化服务?(另外,考虑到容器的类型的生活方式配置和服务的 InstanceContextBehavior 之间的潜在冲突,这种方法会是一个糟糕的主意吗?)
我知道我可能完全问错了问题。我的目标是通过容器提供的方法拦截工具实现 AOP 方法(例如,方法进入/退出日志记录、性能计数和调用限制,所有这些都涉及我不想插入到我的服务实现中的逻辑和依赖项)。我想 WCF 提供了其他方法来解决这个问题,所以我也很想听听其他推荐的方法。
简短的回答 - 是的,它可能。
请查看 Castle WCF 集成。它让您将 Castle Windsor 用于 WCF,它为您提供了比仅注入依赖项更强大的功能。最好使用此处找到的主干版本。关于它的文档不多,但请看一下测试。它们很容易理解,对您来说将是一个很好的示例代码。WCF 设施让您完全按照您的要求进行思考。
是的,继承人使用 ObjectBuilder 和 Spring.NET 的实现(如果您点击链接,还有更多!):
http://www.infoq.com/news/2008/01/wcf-di
虽然不能评论生活方式和实例上下文行为交互。
至于更多特定于 WCF 的方法,利用 WCF 行为概念(如上面的示例)也可能有用。有几种不同的类型,这是一个起点:
http://mehranikoo.net/CS/archive/2007/02/22/WCFBehaviours.aspx
干杯,
马特