【问题标题】:Problem implementing Interceptor pattern实现拦截器模式的问题
【发布时间】:2011-01-26 05:25:05
【问题描述】:

我正在尝试开发一个 Interceptor 框架(在 C# 中),我可以在其中简单地实现一些接口,并通过使用一些静态初始化,将我的所有 Interceptor 注册到一个公共的 Dispatcher 以便稍后调用。

问题在于我的拦截器实现从未被我的应用程序实际引用,因此静态构造函数从未被调用,因此拦截器从未注册。

如果可能,我希望将所有对我的拦截器库的引用排除在我的应用程序之外,因为这是我(希望)在不同模块之间实施松散耦合的方式。

希望这有点道理。如果有什么我可以澄清的,请告诉我...

有没有人有任何想法,或者更好的方法来实现我的拦截器模式?

更新:我遇到了 Spring.NET。我以前听说过,但从未真正研究过。听起来它有很多很棒的功能,对于我正在尝试做的事情非常有用。有人对 Spring.NET 有任何经验吗?

TIA,
杰里米

【问题讨论】:

    标签: c# .net design-patterns implementation


    【解决方案1】:

    我强烈建议您查看一些现有的 .NET 面向方面编程 (AOP) 框架,因为它们可能会以更通用和可维护的方式完成您想要实现的目标。它们中的大多数都是开源的,因此如果它们不能满足您的需求,您可以扩展并为项目做出贡献。

    更多详情:http://www.sharpcrafters.com/aop.net

    【讨论】:

    • +1 我推荐 Spring 和 NHibernate 作为这种模式的示例。您还可以查看 Http 模块在 asp.net 框架中是如何处理的。它可能比其他两个涉及更多,但它是构建拦截器框架的另一种方式。
    【解决方案2】:

    Spring.NET、Unity Framework 和 StructureMap 可能是您最好的选择。我过去所做的是使用 MVC 并创建了一个自定义控制器工厂来生成我的控制器。然而,对于像 NinJect 这样的框架,使用依赖注入变得很困难,因为它缺少 XML 配置(Ninject 使用流畅的 API)。当然,这很困难的原因是您在运行时不确定需要对哪些模块进行依赖注入。

    以上三个 IOC 容器都具有某种形式的 XML 配置,可以在编译之外进行修改,因此有助于使您的应用程序更加模块化,因此(希望)不需要静态初始化。主要优点是您不必担心线程安全。

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2019-04-27
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多