【问题标题】:Policy Injection with ASP.NET MVC Controllers使用 ASP.NET MVC 控制器进行策略注入
【发布时间】:2009-11-30 22:18:51
【问题描述】:

我在将企业库中的策略注入应用程序块与 ASP.NET MVC 结合使用时遇到了问题。

在我的 ControllerFactory 中,我正在创建控制器,然后在控制器上调用 PolicyInjection.Wrap。这给了我一个透明代理到管理调用处理程序链的控制器。

最后,我将透明代理转换为 IController 并返回它。

这似乎运作良好,除了我为我的控制器定义的调用处理程序都没有执行。 (例如,我配置了一个日志处理程序,但 PIAB 没有记录任何内容。)

我的最终演员是否以某种方式搞砸了这一切? ControllerBase.Execute() 如何调用我的控制器?似乎应该使用我的代理。有人在 ASP.NET 控制器上使用 PIAB?

【问题讨论】:

    标签: asp.net-mvc enterprise-library aop policy-injection


    【解决方案1】:

    我正在使用 PIAB 来包装 ASP.NET MVC 控制器,我正在通过调用

    PolicyInjection.Wrap<IController>(instance)

    这将包装 IController 方法。我还使用策略注入来包装也被使用的 IActionInvoker,它允许记录操作名称。

    我还没有成功使用 MarshalByRefObject 包装来包装控制器,但是界面包装就像一个魅力。

    如果您需要更多信息,您可以创建一个接口,其中包含来自 IController、IActionFilter、IAuthorizationFilter、IExceptionFilter 和 IResultFilter 的所有方法,然后让您的控制器实现该接口。然后,您可以将控制器包装为该接口,并通过策略注入获得更多调用。

    我希望这会有所帮助。如果您有更具体的问题,请发布。

    【讨论】:

    • 在 MVC 2 中,Controller 不再是 MarshalByRefObject 的子类,因为它从未与 PIAB 一起使用。本质上,控制器的实际 this 引用被传递而不是代理引用以进行调用,这会导致 PIAB 机制被绕过。使用此答案中建议的接口应该可以继续正常工作。
    【解决方案2】:

    【讨论】:

    • 谢谢迈克。我以前读过这篇文章,但这是关于将 PIAB 与模型一起使用,而不是控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多